列表解析——用来动态地创建列表
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