如何一行代码就快速生成列表

牛逼的一行代码生成列表
将数据封装到列表,常用的方法多半如此:
需要多行代码

1
2
3
4
5
6
7
8
9
10
11
12
13
my_list = []
my_list2 = []

for i in range(1, 15):
if i % 2 == 0:
my_list.append(i)

for item in my_list:
item = item * 2
my_list2.append(item)

print(my_list)
print(my_list2)

[2, 4, 6, 8, 10, 12, 14]
[4, 8, 12, 16, 20, 24, 28]

人生苦短
对于一些通过循环和特定条件生成的列表
更好的解决方法是用一行代码制定它们
一行代码搞定15以内偶数封装:

1
2
my_list = [i for i in range(1, 15) if i % 2 == 0]
print(my_list)

[2, 4, 6, 8, 10, 12, 14]

一行代码将15以内的偶数 * 2,封装

1
2
my_list2 = [i * 2 for i in range(1, 15) if i % 2 == 0]
print(my_list2)

[4, 8, 12, 16, 20, 24, 28]

总结:
基本形式:
new_list = [表达式 循环语句 条件]
解释意思:
位置1放:表达式
位置2放:循环语句
位置3放:判断条件
就这么简单粗暴

这里的 表达式 不仅仅可以做加减乘除,也可以放一些方法调用,
例如将列表中的单词全部转换为小写:

1
2
3
my_list3 = ['WHAT', 'THE', 'FUCK', 'PYTHON', 'HANDSOMEB', 'NICE']
new_list = [s.lower() for s in my_list3]
print(new_list)

[‘what’, ‘the’, ‘fuck’, ‘python’, ‘handsomeb’, ‘nice’]

生成多个元组,再将多个元组放入列表中

1
2
3
my_list4 = [2, 3, 4, 5, 6, 7, 8, 9, 0]
new_my_list4 = [(i, i**2) for i in my_list4]
print(new_my_list4)

[(2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49), (8, 64), (9, 81), (0, 0)]

再来看一个 for 循环的嵌套例子
将两个列表中相同的元素放入新列表
传统方法这样写:

1
2
3
4
5
6
7
8
9
10
my_list = [1, 2, 4, 5, 6, 7, 8, 9]
my_list2 = [9, 2, 3, 4, 8]
new_list = []

for i in my_list:
for j in my_list2:
if i == j:
new_list.append(i)

print(new_list)

[2, 4, 8, 9]

改为一行代码搞定:

1
2
new_list = [i for i in my_list for j in my_list2 if i == j]
print(new_list)

[2, 4, 8, 9]

new_list = [表达式 循环语句 条件]