Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check if element exists in tuple of tuples

Tags:

python

list

I have a list of tuples that look like :

CODES = (     ('apple', 'reddelicious'),     ('caramel', 'sweetsticky'),     ('banana', 'yellowfruit'), ) 

What's the best way to check if a value exists in that tuple? For example I want to be able to say:

'apple' in CODES 

and get True

like image 362
9-bits Avatar asked Feb 27 '13 23:02

9-bits


People also ask

How do you find if an element exists in the tuple?

Method #1 : Using any() any function is used to perform this task. It just tests one by one if the element is present as the tuple element. If the element is present, true is returned else false is returned.

Which operator is used to determine whether an element is present in a tuple or not?

in operator can be used to check for the membership of any element in a sequence. And don't name your tuple as tuple .

How do you access elements in a list of tuples in Python?

In the majority of programming languages when you need to access a nested data type (such as arrays, lists, or tuples), you append the brackets to get to the innermost item.


2 Answers

You are looking for any():

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

Combined with a simple generator expression, this does the task. The generator expression takes each tuple and yields True if it is contains 'apple'. any() then returns True when the first item it requests returns True (otherwise, False). Hence this does what you want. It also reads nicely - if any of the tuples contain 'apple'.

If you are doing this a massive number of times and need performance, then it might be worth making a set of all of the values to allow you to do this very quickly:

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

Naturally, constructing this will be slow and use memory, so it wouldn't be a good idea unless you need a lot of performance and will be doing a lot of membership checks.

like image 91
Gareth Latty Avatar answered Oct 14 '22 07:10

Gareth Latty


You can use itertools.chain():

Using it with in will result in short-circuiting, similar to 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 

For performance comparisons you can check my other answer.

like image 36
Ashwini Chaudhary Avatar answered Oct 14 '22 08:10

Ashwini Chaudhary