我有一个包含小写小写的列表:
l = ['a','z','y','y','z','y','b','b']
Run Code Online (Sandbox Code Playgroud)
如何制作如下所示的元组列表:
[(1, 'a', 1), (2, 'b', 2), (25, 'y', 3), (26, 'z', 2)]
Run Code Online (Sandbox Code Playgroud)
我试图调用Counter我的列表中的字母数,但我不知道如何做.
from collections import Counter
l = ['a','z','y','y','z','y','b','b']
c = Counter(l)
# [('a', 1), ('b', 2), ('y', 3), ('z', 2)]
Run Code Online (Sandbox Code Playgroud)
获取字母序号的一种方法是调用ord函数,并将其与调用结果进行比较ord('a').例如:
>>> ord('s')
115
>>> ord('a')
97
>>> ord('s') - ord('a') + 1
19
Run Code Online (Sandbox Code Playgroud)
另一种方法是构建映射并仅引用它:
>>> import string
>>> ordinals = {letter: ordinal
for ordinal, letter in enumerate(string.ascii_lowercase, 1)}
>>> ordinals['s']
19
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,一旦你得到了序数,将它们与Counter计数合并很容易:
>>> l = ['a','z','y','y','z','y','b','b']
>>> c = Counter(l)
>>> [(ordinals[letter], letter, count) for letter, count in c.items()]
[(25, 'y', 3), (1, 'a', 1), (26, 'z', 2), (2, 'b', 2)]
Run Code Online (Sandbox Code Playgroud)
并且,如果您希望按顺序排序,则元组的默认排序顺序会按字典顺序查看元素 - 换句话说,(1, <anything>)就是之前(2, <anything>),依此类推.所以:
>>> sorted((ordinals[letter], letter, count) for letter, count in c.items())
[(1, 'a', 1), (2, 'b', 2), (25, 'y', 3), (26, 'z', 2)]
Run Code Online (Sandbox Code Playgroud)