1

如果我有这样的清单:

L = [
           ['a', 'b'], 
           ['c', 'f'], 
           ['d', 'e']
       ]

我知道我可以通过以下方式检查 eg'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.

4

2 回答 2

6

首先将您的逻辑编写为常规 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)
于 2018-10-29T16:52:32.153 回答
0

如果您不需要知道“f”的位置,您也可以itertools在这里利用。

import itertools

any('f' in x for x in itertools.chain.from_iterable(l))

这将展平您的嵌套列表并分别评估每个列表。这里的好处是如果你有三个嵌套列表,这个解决方案仍然可以运行,而不必继续编写嵌套for循环。

于 2018-10-29T16:56:27.453 回答