- 列表解析是将一个列表(实际上适用于任何可迭代的对象)转换为另外一个列表,需要符合一定的条件,才能添加到新的列表中。
列表解析语法如下:
[expression for iter_var in iterable]
[expression for iter_var in iterable if cond_expr]
如普通方法实现1-10的平方:
L=[]
for i in range(1,11):
L.append(i**2)
print(L)
>>>[1,2,9,16,25,36,49,64,81,100]
使用列表的方式实现:
L=[i**2 for i in range(1,11)]
print(L)
>>>[1,2,9,16,25,36,49,64,81,100]
- 再举一个列子:
列出1-10中大于等于4的数字的平方,普通方法。
L=[]
for i in range(1,11):
if i >=4:
L.append(i**2)
print(L)
>>>[16, 25, 36, 49, 64, 81, 100]
使用列表解析实现:
L=[i**2 for i in range(1,11) if i>=4]
print(L)
>>>[16, 25, 36, 49, 64, 81, 100]
- 最后一个列子:
套嵌循环,实现两个列表中的元素逐一配对。
普通方法:
L1=["x","y","z"]
L2=[1,2,3]
L3=[]
for a in L1:
for b in L2:
L3.append((a,b))
print(L3)
>>>[('x', 1), ('x', 2), ('x', 3), ('y', 1), ('y', 2), ('y', 3), ('z', 1), ('z', 2), ('z', 3)]
列表解析:
L1=["x","y","z"]
L2=[1,2,3]
L3=[(a,b) for a in L1 for b in L2]
print(L3)
>>>[('x', 1), ('x', 2), ('x', 3), ('y', 1), ('y', 2), ('y', 3), ('z', 1), ('z', 2), ('z', 3)]
知识补充:
如果要在列表解析中处理套嵌循环,请记住for循环句子的顺序与普通方法中的for的循环顺序是一致的。
- 当然,python中除了列表解析,也存在集合解析还有字典解析。(set comprehension and dict comprehension)
集合解析如下:(提取序列中每个单词的首字母,创建一个集合set.)
first_letters=set()
for w in words:
first_letters.add(w[0])
集合解析:
first_letters ={ w[0] for w in words}
- 字典解析
列如,将原来的键与值互换,从而创建一个新的字典。
first_letters =[ w[0] for w in words]
flipped = {}
for key,value in original.iters():
flipped[value] = key
#字典解析
flipped = (value:key for key,value in original.iters())