我需要运行这样的元组列表:
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)]
我的函数(参与)需要遍历这些元组并计算元组的第一个元素一般出现多少次。 例如:
participations(list)
>>>[4, 1, 2]
4是元素"亚伯拉罕"的次数。发生,1是元素" Dora"发生,2是元素" Mike"发生。 最终列表中的参与必须按照给定的名称按字母顺序排列。
这是我到目前为止所做的:
def participations(list):
result = []
for i in list:
for name in i[0]:
result.append(name)
return result
但是它没有给我我想要的东西,它只给了我每个字母彼此分开的名字......
如果你不理解我的话,请随时提出任何问题。
希望你们能提前帮助我们。
答案 0 :(得分:3)
计算最好由python中的Counter
完成:
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]
答案 1 :(得分:0)
没有导入 - 只有一行列表不理解:)
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解释器:
>>> [[y[0] for y in lst].count(z) for z in sorted(set([t[0] for t in lst]))]
[4, 1, 2]
>>>
如果要计算整个元组中第一个元素的出现次数(而不是只考虑第一个元素):
[[x for y in lst for x in y].count(z) for z in sorted(set([t[0] for t in lst]))]