假设我有列表A
,定义为[['foo',1],['bar',2]]
。如何在A
里面找到'foo'
内的列表?
答案 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']]