列表解析——用来动态地创建列表
1
|
[expr for iter_var in iterable if cond_expr]
|
例子一:
1
2
|
map ( lambda x: x * * 2 , range ( 6 ))
[ 0 , 1 , 4 , 9 , 16 , 25 ]
|
1
2
|
[x * * 2 for x in range ( 6 )]
[ 0 , 1 , 4 , 9 , 16 , 25 ]
|
列表解析式可以取代内建的map()函数以及lambda,而且++效率更高++。
例子二:
1
2
3
|
seq = [ 11 , 10 , 9 , 8 , 7 , 6 ]
filter ( lambda x: x % 2 , seq)
[ 11 , 9 , 7 ]
|
1
2
|
[x for x in seq if x % 2 ]
[ 11 , 9 , 7 ]
|
例子三:
找出文本中最长的词
1
2
3
4
5
|
# 第一个最长的词
longest = ''
for word in text:
if len (word) > len (longest):
longest = word
|
1
2
3
|
#所有最长的词
maxlen = max ( len (word) for word in text) # 生成器表达式
|
不足:列表解析得一个不足就是必要生成所有数据,用于创建整个列表。这可能对有大量数据得迭代其有负面效应。
++解决方法++:生成器表达式,通过结合列表解析和生成器解决了这个问题。
嵌套列表推导式
例一
1
2
3
4
5
6
|
all_data = [[ 1 , 3 , 5 , 7 , 9 ],
[ 2 , 4 , 6 , 8 , 10 ]]
result = []
for nums in all_data:
temp_num = [num for num in nums if num > = 5 ]
result.extend(temp_num)
|
嵌套列表推导式
1
|
result = [num for nums in all_data for num in nums if num > = 5 ]
|
推导式中for的部分是按嵌套顺序排列的。
例二
1
2
3
4
|
some_tuples = [( 1 , 2 , 3 ), ( 4 , 5 , 6 ), ( 7 , 8 , 9 )]
flattened = [x for tup in some_tuples for x in tup]
flattened
[ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ]
|
以上这篇基于Python列表解析(列表推导式)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/Shingle_/article/details/55050701