Yes
列表理解由括号组成,括号中包含一个表达式,后跟for子句,然后是零个或多个for或if子句。结果将是一个新的列表,该列表是在其后的for和if子句的上下文中对表达式求值得到的。例如,如果两个列表的元素不相等,则此listcomp将其组合:
>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
>>> combs = []
>>> for x in [1,2,3]:
... for y in [3,1,4]:
... if x != y:
... combs.append((x, y))
...
>>> combs
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
请注意,for和if语句的顺序在这两个代码段中是如何相同的。
list(group)
groupby
),您可以使用生成器表达式在列表理解中引入临时变量:
>>> [group_list for group_list in (list(group) for key, group in groupby(range(5,15), key= lambda x: str(x)[0])) if len(group_list) >= 2]
[[10, 11, 12, 13, 14]]
或者,使用
filter
map
list
:
>>> list(\
... filter(lambda group: len(group) >= 2,\
... map(lambda key_group: list(key_group[1]),\
... groupby(range(5,15), key=lambda x: str(x)[0])\
... )\
... )\
... )
[[10, 11, 12, 13, 14]]