Reputation: 309
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.
Upvotes: 0
Views: 100
Reputation: 4010
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]))]
Upvotes: 0
Reputation: 52929
Counting is best done by Counter
in python:
from collections import Counter
from operator import itemgetter
data = [('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)]
def participations(data):
# You could use a generator expression too instead of a map:
# Counter(d[0] for d in data)
counts = Counter(map(itemgetter(0), data))
return [counts[k] for k in sorted(counts.keys())]
print(participations(data))
[4, 1, 2]
Upvotes: 3