Stagg - 2 years ago 63
Python Question

# Running through a list of tuples

I need to run through a list of tuples like this:

``````list = [('Abraham', 'Lisboa', 42195, '10-18', 2224),
('Mike', 'Nova Iorque', 42195, '06-13', 2319),
('Abraham', 'Toquio', 42195, '02-22', 2403),
('Mike', 'Sao Paulo', 21098, '04-12', 1182),
('Abraham', 'Sao Paulo', 21098, '04-12', 1096),
('Dora', 'Toquio', 42195, '02-22', 2449),
('Abraham', 'Boston', 42195, '04-20', 2187)]
``````

My function (participations) needs to run through these tuples and count how many times does the first element of the tuples occurrs in general.
For example:

``````participations(list)
>>>[4, 1, 2]
``````

4 is the number of times that the element "Abraham" occurs, 1 is the number of times the element "Dora" occurs and 2 is the number of times the element "Mike" occurs.
The participations in the final list must be in alphabetical order, following the names given.

Here is what I have so far:

``````def participations(list):
result = []
for i in list:
for name in i[0]:
result.append(name)
return result
``````

But it's not giving me what I want, it only gives me the names with every letter separated from each other...

Feel free to ask any questions if you don't understand mine.

Hope you guys can help me, thanks in advance.

No imports - just one line of list incomprehension :)

``````lst = [('Abraham', 'Lisboa', 42195, '10-18', 2224),
('Mike', 'Nova Iorque', 42195, '06-13', 2319),
('Abraham', 'Toquio', 42195, '02-22', 2403),
('Mike', 'Sao Paulo', 21098, '04-12', 1182),
('Abraham', 'Sao Paulo', 21098, '04-12', 1096),
('Dora', 'Toquio', 42195, '02-22', 2449),
('Abraham', 'Boston', 42195, '04-20', 2187)]

[[y[0] for y  in lst].count(z) for z in sorted(set([t[0] for t in lst]))]
``````

Python 2.7.6 interpreter:

``````>>> [[y[0] for y  in lst].count(z) for z in sorted(set([t[0] for t in lst]))]
[4, 1, 2]
>>>
``````

If you want to count the number of occurrences of the first element in the entire tuple (as opposed to only considering the first element):

``````[[x for y in lst for x in y].count(z) for z in sorted(set([t[0] for t in lst]))]
``````
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download