Ericson Willians
Ericson Willians

Reputation: 7845

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.

Upvotes: 6

Views: 5819

Answers (2)

Sid
Sid

Reputation: 4997

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

Upvotes: 3

timgeb
timgeb

Reputation: 78650

() 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.

Upvotes: 28

Related Questions