我有以下列表:
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/