列表推导式用来动态创建列表,只用一条简洁的表达式即可对得到的元素进行转换变形,有关的表达式为for A in B
[表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]
例如:
>>> list1 = [ i*3 for i in range(10) ]
>>> list1
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
等同于如下:
list1 = []
for x in range(10):
list1.append(x*3)
print(list1)
再如:
>>> list1 = [(m, n) for m in range(8) for n in range(8) if m%2==0 if n%2!=0]
>>> list1
[(0, 1), (0, 3), (0, 5), (0, 7), (2, 1), (2, 3), (2, 5), (2, 7), (4, 1), (4, 3), (4, 5), (4, 7), (6, 1), (6, 3), (6, 5), (6, 7)]
等同于如下:
list1 = []
for m in range(8):
for n in range(8):
if m%2 == 0:
if n%2!= 0:
list1.append((m,n))
print(list1)
最后一个例子:
list1 = []
list2 = ['1.how are you', '2.Welcome to China', '3.Fine!']
list3 = ['2.June', '3.Lucy', '1.Lily']
list4 = [name + ':' + slogan[2:] for slogan in list2 for name in list3 if slogan[0] == name[0]]
for each in list4:
print(each)
运行结果如下图:
过滤条件可有可无,取决于实际应用,只留下表达式;相当于下面这段for循环:
result = []
for value in collection:
if condition:
result.append(expression)
例1: 过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母
>>> names = ['Bob','Tom','alice','Jerry','Wendy','Smith']
>>> [name.upper() for name in names if len(name)>3]
结果为:
['ALICE', 'JERRY', 'WENDY', 'SMITH']