Python 如何检查第二个子列表中是否存在元素?
如果我有这样一份清单:Python 如何检查第二个子列表中是否存在元素?,python,python-3.x,for-loop,nested,generator-expression,Python,Python 3.x,For Loop,Nested,Generator Expression,如果我有这样一份清单: L = [ ['a', 'b'], ['c', 'f'], ['d', 'e'] ] if any('f' in second_sublist for second_sublist in sublist for sublist in L) 我知道我可以通过以下方式使用任何子列表检查是否包含例如“f”: if any('f' in sublist for sublist in L) #
L = [
['a', 'b'],
['c', 'f'],
['d', 'e']
]
if any('f' in second_sublist for second_sublist in sublist for sublist in L)
我知道我可以通过以下方式使用任何子列表检查是否包含例如“f”:
if any('f' in sublist for sublist in L) # True
L = [
[
['a', 'b'],
['c', 'f'],
['d', 'e']
],
[
['z', 'i', 'l'],
['k']
]
]
但是,我将如何在第二个子列表中进行搜索,即,如果列表以以下方式初始化:
if any('f' in sublist for sublist in L) # True
L = [
[
['a', 'b'],
['c', 'f'],
['d', 'e']
],
[
['z', 'i', 'l'],
['k']
]
]
我尝试将for链接到如下表达式中:
L = [
['a', 'b'],
['c', 'f'],
['d', 'e']
]
if any('f' in second_sublist for second_sublist in sublist for sublist in L)
但是,这会崩溃,因为没有定义名称“sublist”。首先将逻辑写入常规for循环: 然后使用for语句以相同顺序重写为生成器表达式:
any('f' in second_sub for first_sub in L for second_sub in first_sub)
首先将逻辑编写为常规for循环: 然后使用for语句以相同顺序重写为生成器表达式:
any('f' in second_sub for first_sub in L for second_sub in first_sub)
如果您不需要知道“f”位于何处,也可以在此处使用itertools
import itertools
any('f' in x for x in itertools.chain.from_iterable(l))
这将展平嵌套列表并分别计算每个列表。这里的好处是,如果您有三个嵌套列表,则此解决方案仍能正常工作,而无需继续为循环编写嵌套。如果您不需要知道“f”位于何处,也可以在此处使用itertools
import itertools
any('f' in x for x in itertools.chain.from_iterable(l))
这将展平嵌套列表并分别计算每个列表。这里的好处是,如果您有三个嵌套列表,则此解决方案仍然可以运行,而无需继续为循环编写嵌套。旁注:不要隐藏内置列表。不要调用变量列表。换个说法:比如L,或者lst。如果您以后需要使用内置的,您将无法使用。@jpp我这样做只是为了使imo更易于阅读。如果我想创建这样的静态列表,我也会使用元组。不,这会使它更难阅读/更容易出错。任何复制/粘贴您的代码的人都会发现他们的会话不允许稍后在代码中列出。如果易于阅读是你的目标,你也可以使用少L个字符。@jpp我相信这取决于读者,但我也认为不隐藏列表函数是有效的,这就是我调整它的原因。旁注:不要隐藏内置列表。不要调用变量列表。换个说法:比如L,或者lst。如果您以后需要使用内置的,您将无法使用。@jpp我这样做只是为了使imo更易于阅读。如果我想创建这样的静态列表,我也会使用元组。不,这会使它更难阅读/更容易出错。任何复制/粘贴您的代码的人都会发现他们的会话不允许稍后在代码中列出。如果你的目标是便于阅读,你也可以使用不带L的字符。@jpp我相信这取决于读者,但我也认为不隐藏列表函数是有效的,这就是我调整它的原因。我会选择chain.from_iterable。我会选择chain.from_iterable。