遍历元组列表

时间:2016-04-14 21:26:53

标签: python list python-2.7 tuples

我需要运行这样的元组列表:

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

但是它没有给我我想要的东西,它只给了我每个字母彼此分开的名字......

如果你不理解我的话,请随时提出任何问题。

希望你们能提前帮助我们。

2 个答案:

答案 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]))]