检查元组的元组中是否存在元素

时间:2013-02-27 23:47:39

标签: python list

我有一个类似于:

的元组列表
CODES = (
    ('apple', 'reddelicious'),
    ('caramel', 'sweetsticky'),
    ('banana', 'yellowfruit'),
)

检查该元组中是否存在值的最佳方法是什么?例如,我希望能够说:

'apple' in CODES

并获得True

2 个答案:

答案 0 :(得分:49)

您正在寻找any()

if any('apple' in code for code in CODES):
    ...

结合简单的generator expression,这就完成了任务。生成器表达式获取每个元组,如果它包含True,则生成'apple'any()然后在请求的第一个项目返回True时返回True(否则为False)。因此,这就做你想要的。如果任何元组包含'apple' ,它也可以很好地读取 -

如果你这么做很多次并需要性能,那么可能需要制作一组所有值来让你很快完成这项工作:

cache = set(itertools.chain.from_iterable(CODES)))

当然,构建它会很慢并且使用内存,所以除非你需要大量的性能并且会进行大量的成员检查,否则这不是一个好主意。

答案 1 :(得分:7)

您可以使用itertools.chain()

将其与in一起使用会导致短路,类似于any()

In [30]: CODES = (
   ....:     ('apple', 'reddelicious'),
   ....:     ('caramel', 'sweetsticky'),
   ....:     ('banana', 'yellowfruit'),
   ....: )


In [31]: from itertools import chain

In [32]: 'apple' in chain(*CODES)
Out[32]: True

In [33]: 'foo' in chain(*CODES)
Out[33]: False

对于效果比较,您可以查看我的other answer