搜索列表中包含元素的列表 [Python 3]

Search for list with element inside list [Python 3]

假设我有列表 A,定义为 [['foo',1],['bar',2]]。我如何在 A 中找到包含 'foo' 的列表?

使用生成器表达式来测试每个子列表。因为我们只想要第一个,所以我们可以在 genexp 上使用 next() 函数。

A = [['foo', 1], ['bar', 2]]
a = next(x for x in A if "foo" in x)

这为您提供了子列表本身。如果你想要子列表的索引:

a = next(i for i, x in enumerate(A) if "foo" in x)

请注意,您实际上可能不需要索引。只需拥有列表对象,您就可以做大多数您想做的事情。例如,如果你想用 ["baz", 3] 完全替换子列表,你可以对其进行切片赋值:

a = next(x for x in A if "foo" in x)
a[:] = ["baz", 3]

无论使用哪种公式,如果找不到搜索词,您都会得到一个 StopIteration 异常。您可以 return None 或其他任何方式,而是使用 next() 的第二个参数。在这种情况下,您必须在 genexp 两边加上括号:

a = next((x for x in A if "foo" in x), None)

为了使事情复杂化,您可以使用 filter

>>> a = [['foo',1],['bar',2]]
>>> list(filter(lambda x:'foo'in x , a))
[['foo', 1]]
>>> a = [['foo',1],['bar',2],[1,'foo']]
>>> list(filter(lambda x:'foo'in x , a))
[['foo', 1], [1, 'foo']]