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

时间:2015-02-09 22:29:43

标签: python list search python-3.x

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

2 个答案:

答案 0 :(得分:4)

使用生成器表达式测试每个子列表。由于我们只想要第一个,我们可以在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例外。您可以使用None的第二个参数返回next()或其他任何内容。在这种情况下,您必须在genexp周围加上括号:

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

答案 1 :(得分:2)

只是为了使事情复杂化,您可以使用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']]