Python初学者-如何从另一个列表生成列表和频率

Python初学者-如何从另一个列表生成列表和频率,python,list,frequency,Python,List,Frequency,鉴于: 我想要一个元素列表和第二个元素的计数频率: [['x','a'], ['y','b'], ['z','a']] 像往常一样,他来营救 你可以这样做: >>> from collections import Counter >>> L = [['x','a'], ['y','b'], ['z','a']] >>> freq = Counter(y for x, y in L) >>> [[x, y, freq[y]]

鉴于:

我想要一个元素列表和第二个元素的计数频率:

[['x','a'], ['y','b'], ['z','a']]
像往常一样,他来营救

你可以这样做:

>>> from collections import Counter
>>> L = [['x','a'], ['y','b'], ['z','a']]
>>> freq = Counter(y for x, y in L)
>>> [[x, y, freq[y]] for x, y in L]
[['x', 'a', 2], ['y', 'b', 1], ['z', 'a', 2]]

另一种解决方案是使用字典:

from collections import Counter
pairs = [['x','a'], ['y','b'], ['z','a']]
counts = Counter(b for a,b in pairs)
pairs_with_counts = [[a, b, counts[b]] for a,b in pairs]

输出是
[['x','a',2','y','b',1','z','a',2]

我建议不要使用小写的
l
作为变量名,它可能会与
1
计数器是一个字典混淆。这一切都是在幕后进行的,只是速度要快得多
from collections import Counter
pairs = [['x','a'], ['y','b'], ['z','a']]
counts = Counter(b for a,b in pairs)
pairs_with_counts = [[a, b, counts[b]] for a,b in pairs]
mylist = [['x','a'], ['y','b'], ['z','a']]
d = {}
for (a, b) in mylist:
    try:
        d[b] += 1
    except KeyError:
        d[b] = 1

mynewlist = [[a, b, d[b]] for (a, b) in mylist]
print(mynewlist)