2012-10-09 40 views
11

我有一个像下面如何确定2维列表是否包含值?

mylist = [('value1', 'value2', 'value3'), ('secval1', 'secval2', 'secval3')] 

我怎么看,如果列表中包含“值”的列表吗?

+0

如果你想看到的二维表中的值的指标,我用这样的回答:https://stackoverflow.com/a/6518412/1799272 – Oli4

回答

20

使用any()

any('value2' in sublist for sublist in mylist) 
+0

谢谢,我好奇是否有办法获得匹配的物品? – Tommyka

+1

要获得包含您正在查找的值的项目,您应该使用常规的'for'循环,并在列表中存在''value2''时返回或中断。如果你想找到所有匹配的项目,你可以使用'[子列表]中的'[子列表作为子列表中的'value2']。 –

7

你可以简单地检查所有子列表与any

any('value2' in subl for subl in mylist) 
0

类似any(),也支持短路的解决方案:

>>> from itertools import chain 
>>> mylist = [('value1', 'value2', 'value3'), ('secval1', 'secval2', 'secval3')] 
>>> 'value2' in chain(*mylist) 
True 

证明它像那样短路:

>>> it=chain(*mylist) 
>>> 'value2' in it 
True 
>>> list(it) #part of iterable still not traversed 
['value3', 'secval1', 'secval2', 'secval3'] 
+0

'any'已经发生短路。通过创建一个定义'__nonzero__'的类来测试它,在其中放置一个'print'语句,并将它用作任意参数的第二个值(当第一个值为'True'时)。 'print'语句不会被执行。 –

+0

@poorsod我知道,这就是为什么我说'“类似于任何()”'。 :) –

+0

哦,我误解了 - 认为你建议替换使用短路的“任何”。 –

2
'value2' in (item for sublist in mylist for item in sublist) 
相关问题