嵌套列表中'in'操作符的替代方案

7 投票
5 回答
3562 浏览
提问于 2025-04-17 16:58

如果我想在Python的一个列表里找东西,我可以用'in'这个操作符:

list = ['foo', 'bar']
'foo' in list #returns True

但是如果我想在一个嵌套列表里找东西,我该怎么做呢?

list = [('foo', 'bar'), ('bar', 'foo')]
'foo' in list #returns False

有没有办法在不使用for循环的情况下,一行代码就能做到呢?

谢谢!

5 个回答

2

你也可以用 in 来做到这一点。

>>> list = [('foo', 'bar'), ('bar', 'foo')]
>>> 'foo' in (x[1] for x in list)
True

编辑: 这个方法只检查 foo 是否是第一个元素。

如果想要查找元素 'foo'(任何位置的):

 >>>'foo' in reduce(lambda x,y: x+y, list)   
 True

再试试其他方法:

In [7]: list
Out[7]: [('foo', 'me', 'bar'), ('bar', 'foo', 'you')]
In [8]: 'me' in reduce(lambda x,y: x+y, list)
Out[8]: True

In [9]: 'you' in reduce(lambda x,y: x+y, list)
Out[9]: True
3

这虽然有点不太合适,但你可以很简单地用一行代码做到这一点。

mainlist = [('foo', 'bar'), ('bar', 'foo')]
[elem for elem in sublist for sublist in mainlist] #['bar', 'bar', 'foo', 'foo']

'foo' in [elem for elem in sublist for sublist in mainlist] # True
8

你可能想用 any

>>> list = [('foo', 'bar'), ('bar', 'foo')]
>>> any('foo' in e for e in list)
True

不过,某种循环是不可避免的。

撰写回答