列表、元组、字典推导式

一、列表推导式:

(1)生成指定范围的数值列表,语法格式如下:

list = [Expression for var in range]

   参数说明:

  • list:表示生成的列表名称
  • Expression:表达式,用于计算新列表的元素
  • var:循环变量
  • range:采用range()函数生成的range对象

  例如:生成一个包含10个随机数的列表,要求数的范围在10~100(包含)之间,代码如下:

1 import random
2 randomnumber = [random.randint(10, 100) for i in range(10)]
3 print(randomnumber)
4 
5 # 输出结果:
6 # [38, 12,  28, 26, 58, 67, 100, 41, 97, 15]

(2)根据列表生成指定需求的列表:语法格式如下:

newlist = [Expression for var in list]

  参数说明:

  • newlist:表示新生成的列表名称
  • Expression:表达式,用于计算新列表的元素
  • var:变量,值为后面列表的每个元素值
  • list:用于生成新列表的原列表

  例如:定义一个商品价格的列表,然后应用列表推导式生成一个将全部商品价格打五折的列表,具体代码如下:

1 price = [1200, 5330, 2988, 6200, 1998, 8888]
2 sale = [int(x/2) for x in price]
3 print(sale)
4 
5 # 输出结果:
6 # [600, 2665, 1494, 3100, 999, 4444]

(3)从列表中选择符合条件的元素组成新的列表,语法格式如下:

newlist = [Expression for var in list if condition]

  参数说明:

  • newlist:表示新生成的列表名称
  • Expression:表达式,用于计算新列表的元素
  • var:变量,值为后面列表的每个元素值
  • list:用于生成新列表的原列表
  • condition:条件表达式,用于指定筛选条件

例如:定义一个商品价格的列表,然后应用列表推导式生成一个商品价格高于5000的列表,具体代码如下:

1 price = [1200, 5300, 2988, 6200, 1988, 8888]
2 sale = [x for x in price if x>5000]
3 print(sale)
4 
5 # 输出结果:
6 # [5300, 6200, 8888]

二、元组推导式:

元组推导式类似于列表推导式,只需将列表推导式中的中括号 '[]' 修改为小括号 '()'即可。例如,生成一个包含10个随机数的元组:

1 import random
2 randomnumber = (random.randint(10, 100) for i in range(10))
3 print(randomnumber)
4 
5 # 输出结果:
6 <generator object <genexpr> at 0x0000000003056620>

  由此可见,元组推导式生成的结果并不是一个元组或者列表,而是一个生成器对象(可以使用for循环调用生成器对象中的元素值,日常写代码中使用这种方式存储一个元组可以大大节省内存空间)。可以使用tuple()函数(或list()函数)将生成器对象转换为元组(或列表)。上面代码修改如下:

1 import random
2 randomnumber = (random.randint(10, 100) for i in range(10))
3 randomnumber = tuple(randomnumber)
4 print(randomnumber)
5 
6 # 输出结果:
7 # (76, 54, 74, 63, 61, 71, 53, 75, 61, 55)

三、字典推导式:

使用字典推导式可以快速生成一个字典,它的表现形式和列表推导式类似。

  例如:生成一个包含4个随机数的字典,随机数在10~100(包含)之间,字典的键用数字表示,代码如下:

1 import random
2 
3 randomdict = {i:random.randint(10, 100) for i in range(1, 5)}
4 print(randomdict)
5 
6 # 输出结果:
7 # {1:21, 2:85, 3:11, 4:65}

猜你喜欢

转载自www.cnblogs.com/zuzhuangmengxiang/p/12673898.html
今日推荐