关于python:检查元组的元组中是否存在元素

Check if element exists in tuple of tuples

我有一个看起来像元组的列表:

1
2
3
4
5
CODES = (
    ('apple', 'reddelicious'),
    ('caramel', 'sweetsticky'),
    ('banana', 'yellowfruit'),
)

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

1
'apple' in CODES

并得到True


您正在寻找any()

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

结合一个简单的生成器表达式,可以完成此任务。生成器表达式采用每个元组,如果包含'apple',则生成Trueany()然后在它请求的第一项返回True时返回True(否则为False)。因此,这就是您想要的。它也很好看-如果任何元组包含'apple'

如果您要执行大量操作并且需要性能,那么可能值得对所有值进行一组设置以使您能够快速执行此操作:

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

自然地,构造它会很慢并且会占用内存,因此,除非您需要大量的性能并进行大量的成员资格检查,否则这不是一个好主意。


您可以使用itertools.chain()

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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

对于性能比较,您可以检查我的其他答案。