如何检查第二子列表中是否存在元素?

时间:2018-10-29 16:47:39

标签: python python-3.x for-loop nested generator-expression

如果我有这样的列表:

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,这崩溃了。

3 个答案:

答案 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循环。