列表中的Python计数列表

标签 python

我有以下列表:

data = [('A', 'B'), ('C','D'), ('E','F'), ('G','H'), ('B','A'), ('D','C')]

第一个和第二个元素的顺序无关紧要,例如,('A', 'B') 和 ('B','A') 被视为相同。期望的结果是:

('A','B') 2
('C','D') 2
('E','F') 1
('G','H') 1

我试过这个(改编自 How to count number of duplicates in a list of tuples? ):

data = [('A', 'B'), ('C','D'), ('E','F'), ('G','H'), ('B','A'), ('D','C')]
from collections import Counter 
for i, j in Counter(data).most_common():
    print i, j

结果是这样的:

('G', 'H') 1
('B', 'A') 1
('E', 'F') 1
('A', 'B') 1
('D', 'C') 1
('C', 'D') 1

有什么建议吗?

最佳答案

解决这个问题的一种方法是遍历每个元组并使用 sorted() 按字母顺序排列它们。所以("B", "A")会变成("A", "B")等。然后就可以继续用之前写的代码来统计了发生的事情

from collections import Counter

data = [('A', 'B'), ('C','D'), ('E','F'), ('G','H'), ('B','A'), ('D','C')]

data = [tuple(sorted(item)) for item in data]  # sorts each tuple alphabetically

for i, j in Counter(data).most_common():
    print(i, j)

或者不使用列表理解(并使用 Python 2.x 语法):

from collections import Counter

data = [('A', 'B'), ('C','D'), ('E','F'), ('G','H'), ('B','A'), ('D','C')]

for i in range(0, len(data)):
    data[i] = tuple(sorted(data[i]))

for i, j in Counter(data).most_common():
    print i, j

关于列表中的Python计数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41317486/

相关文章:

Python cartopy map ,国外的剪辑区域(多边形)

python - 在 Django 中收集来自第三方应用程序的消息

python - 使用 Python 将行插入 SQLite 时出错

python - 如何让 PyC​​harm 在方法中自动完成代码?

python - Django - 获取相关集合中的对象计数

python - 如何使用 python 与网页交互?

python - Django,延迟属性错误

python - odoo 无法适配类型 'hr.employee'

python - 在 Google App Engine 上获取 DISTINCT 用户

python - 二进制搜索算法不起作用