列表、元组、字典推导式
一、列表推导式:
(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}