Python中的列表生成式
2018-06-21 本文已影响17人
DeeJay_Y
列表生成式
抛出一个问题,创建一个从1到100的列表,该怎么写:
- while
li = []
i = 1
while i <= 100:
li.append(i)
i += 1
print(li)
- for
li = []
for i in range(1,101):
li.append(i)
print(li)
关于range()
用法特别类似于切片操作,是用来生成列表的,在Python2中,返回的是列表,而且如果指定了一个特别大的列表,占用内
存会很高。
但是在Python3中,range()返回的不再是列表,并且只有在需要的时候在生成对应的列表,从而解决了Python2中的问题。
用法
li = [i for i in range(1,10)]
print(li) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
上述例子就是一个列表生成式,其中最左边的这个i
代表着每次插入列表的值,而后面的for i in range(1,10)
则代表着这个列表循环插值多少次,即列表长度。
li2 = [1 for i in range(1,10)]
print(li2) # [1, 1, 1, 1, 1, 1, 1, 1, 1]
这次插入的值为固定值1,所以li2为上例输出的结果。
列表生成式中也可以通过if
来进行筛选:
li3 = [i for i in range(1,10) if i%2 ==0]
print(li3) # [2, 4, 6, 8]
通过if 筛选了偶数项
同时列表生成式还支持循环嵌套:
li4 = [i for i in range(3) for j in range(2)]
print(li4) # [0, 0, 1, 1, 2, 2]
两层嵌套,可以写的更直观一点,插入一个元祖看一下:
li5 = [(i,j) for i in range(3) for j in range(2)]
print(li5) # [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)]
但是不建议超过三层嵌套