'How to check if there's a tuple inside a list?

Why does this:

seq = [(1, 2), (3, 4), (5, 6)]
print(() in seq)

return False? How can I check if there's a tuple, or even a generic sequence, inside a sequence with no specific values, as in this answer.



Solution 1:[1]

() is an empty tuple. seq does not contain an empty tuple.

You want

>>> seq = [(1, 2), (3, 4), (5, 6)]
>>> any(isinstance(x, tuple) for x in seq)
True

For a generic sequence you can use

>>> from collections import abc
>>> any(isinstance(x, abc.Sequence) for x in seq)
True

However, lots of objects are informally treated as sequences but neither implement the full protocol abc.Sequence defines nor register as a virtual subclass of Sequence.

Read this excellent answer for additional information.

You can find a question about detecting sequences here.

Solution 2:[2]

What you are checking is the existence of an empty tuple in the list.

You can check the type instead.

def has_tuple(seq):    
    for i in seq:
        if isinstance(i, tuple):
            return True
    return False

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 timgeb