charsi
charsi

Reputation: 409

How to access lists inside a tuple inside a list in python

I am a newbie to python. Trying to learn how to access Lists inside a Tuple inside a List. My List is:

holidays = [(0,),
 (1, [2, 16]),
 (2, [20]),
 (4, [14]),
 (5, [29]),
 (7, [4]),
 (9, [4]),
 (11, [23, 24]),
 (12, [25])]

I would like to know the best way to access each tuple and its list in a more efficient way. I tried using:

for i, tuples in enumerate(holidays):
    for list in tuples:
        print list

But i get the following error:

for list in tuples:
TypeError: 'int' object is not iterable

Help would be much appreciated.

Upvotes: 1

Views: 1795

Answers (4)

BikerDude
BikerDude

Reputation: 444

Change your first element 0 to (0), Also, remove 'i' from your for loop, as told by Stavros, it will work.

holidays = [([0]),
 (1, [2, 16]),
 (2, [20]),
 (4, [14]),
 (5, [29]),
 (7, [4]),
 (9, [4]),
 (11, [23, 24]),
 (12, [25])]

tuples in enumerate(holidays): list in tuples: print list

Upvotes: 0

Pablo
Pablo

Reputation: 217

short version

[y for x in holidays if isinstance(x, tuple) for y in x if isinstance(y, list)]

You can't do a for .. in LOOP on an integer, that's why the program cras

Upvotes: 1

Laurent LAPORTE
Laurent LAPORTE

Reputation: 22952

Well, your holidays list is not uniform: the first entry is an integer (0), the others are tuples.

holidays = [0,  # <- integer
    (1, [2, 16]),
    (2, [20]),
    (4, [14]),
    (5, [29]),
    (7, [4]),
    (9, [4]),
    (11, [23, 24]),
    (12, [25])]

Here is a possible loop:

for entry in holidays:
    if entry == 0:
        continue  # don't know what to do with zero
    month, days = entry
    print(month, days)

We use unpaking to extract the month and the days. See Tuples and Sequences in the Python tutorial.

Upvotes: 0

Stavros Avramidis
Stavros Avramidis

Reputation: 865

You need to remove the i in the first for loop:

for tuples in enumerate(holidays):
    for list in tuples:
        print list

Upvotes: 2

Related Questions