Skip to main content
 首页 » 编程设计

列表中的Python计数列表

2025年05月04日16insus

我有以下列表:

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