如果我有这样的列表:
L = [
['a', 'b'],
['c', 'f'],
['d', 'e']
]
我知道我可以检查例如通过以下方式使用'f'
将any
包含在任何子列表中:
if any('f' in sublist for sublist in L) # True
但是我将如何搜索第二个子列表,即如果列表是通过以下方式初始化的:
L = [
[
['a', 'b'],
['c', 'f'],
['d', 'e']
],
[
['z', 'i', 'l'],
['k']
]
]
我试图像这样链接for in
表达式:
if any('f' in second_sublist for second_sublist in sublist for sublist in L)
但是,由于name 'sublist' is not defined
,这崩溃了。
答案 0 :(得分:5)
首先将您的逻辑写为常规 for
循环:
for first_sub in L:
for second_sub in first_sub:
if 'f' in second_sub:
print('Match!')
break
然后使用for
语句以相同顺序重写为生成器表达式:
any('f' in second_sub for first_sub in L for second_sub in first_sub)
答案 1 :(得分:0)
您可以两次使用any
,如下所示:
if any(any('f' in secondsublist for secondsublist in sublist) for sublist in list) # True
答案 2 :(得分:0)
如果您不需要知道'f'的位置,也可以在这里利用itertools
。
import itertools
any('f' in x for x in itertools.chain.from_iterable(l))
这将拼合嵌套列表并分别评估每个列表。这样做的好处是,如果您有三个嵌套列表,则此解决方案仍然可以运行而不必继续编写嵌套for
循环。