列表中的Python计数列表
我有以下清单:列表中的Python计数列表,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 我尝试了以下改编: 结果如下所示: ('G', 'H') 1 ('B', 'A') 1 ('E', 'F') 1 ('A',
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
我尝试了以下改编:
结果如下所示:
('G', 'H') 1
('B', 'A') 1
('E', 'F') 1
('A', 'B') 1
('D', 'C') 1
('C', 'D') 1
from collections import Counter
data = [('A', 'B'), ('C','D'), ('E','F'), ('G','H'), ('B','A'), ('D','C')]
data = [Counter(x) for x in data]
print Counter([", ".join(list(x.elements())) for x in data]).most_common()
有什么建议吗?解决这个问题的一种方法是迭代每个元组,并使用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
解决这个问题的一种方法是迭代每个元组,并使用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
一种方法是计算内部元组的计数器,如下所示:
('G', 'H') 1
('B', 'A') 1
('E', 'F') 1
('A', 'B') 1
('D', 'C') 1
('C', 'D') 1
from collections import Counter
data = [('A', 'B'), ('C','D'), ('E','F'), ('G','H'), ('B','A'), ('D','C')]
data = [Counter(x) for x in data]
print Counter([", ".join(list(x.elements())) for x in data]).most_common()
一种方法是计算内部元组的计数器,如下所示:
('G', 'H') 1
('B', 'A') 1
('E', 'F') 1
('A', 'B') 1
('D', 'C') 1
('C', 'D') 1
from collections import Counter
data = [('A', 'B'), ('C','D'), ('E','F'), ('G','H'), ('B','A'), ('D','C')]
data = [Counter(x) for x in data]
print Counter([", ".join(list(x.elements())) for x in data]).most_common()
如果出于某种原因,您不想使用计数器
data_dict = {}
for d in data:
temp_d = tuple(sorted(d))
if temp_d in data_dict:
data_dict[temp_d] += 1
else:
data_dict[temp_d] = 1
输出
{('A', 'B'): 2, ('C', 'D'): 2, ('E', 'F'): 1, ('G', 'H'): 1}
如果你用熊猫呢
import pandas as pd
pd.Series(data).map(lambda x: tuple(sorted(x))).value_counts()
输出
(C, D) 2
(A, B) 2
(G, H) 1
(E, F) 1
dtype: int64
如果出于某种原因,您不想使用计数器
data_dict = {}
for d in data:
temp_d = tuple(sorted(d))
if temp_d in data_dict:
data_dict[temp_d] += 1
else:
data_dict[temp_d] = 1
输出
{('A', 'B'): 2, ('C', 'D'): 2, ('E', 'F'): 1, ('G', 'H'): 1}
如果你用熊猫呢
import pandas as pd
pd.Series(data).map(lambda x: tuple(sorted(x))).value_counts()
输出
(C, D) 2
(A, B) 2
(G, H) 1
(E, F) 1
dtype: int64
你必须在清点之前把它们分类 数据=['A','B','C','D','E','F','G','H','B','A','D','C'] def计数: 排序的_数据=[数据中d的tuplesortedd] 对于反排序数据中的i,j。最常见的: 普林蒂,j
你必须在清点之前把它们分类 数据=['A','B','C','D','E','F','G','H','B','A','D','C'] def计数: 排序的_数据=[数据中d的tuplesortedd] 对于反排序数据中的i,j。最常见的: 普林蒂,j tuple不是适合您的用例的最佳类型。考虑使用SET, 比如说,
(1, 2) == (2, 1) # False
{1, 2} == {2, 1} # True
tuple不是适合您的用例的最佳类型。考虑使用SET,
比如说,
(1, 2) == (2, 1) # False
{1, 2} == {2, 1} # True
无需加载计数器模块的简单解决方案: 输出:
{('C', 'D'): 2, ('G', 'H'): 1, ('E', 'F'): 1, ('A', 'B'): 2}
无需加载计数器模块的简单解决方案: 输出:
{('C', 'D'): 2, ('G', 'H'): 1, ('E', 'F'): 1, ('A', 'B'): 2}
试试熊猫
import pandas as pd
pd.Series(pd.Series([('a','b'),('b','a'),('c','d')]).apply(lambda x: tuple(sorted(list(x))))).value_counts()
#output
(a, b) 2
(c, d) 1
dtype: int64
试试熊猫
import pandas as pd
pd.Series(pd.Series([('a','b'),('b','a'),('c','d')]).apply(lambda x: tuple(sorted(list(x))))).value_counts()
#output
(a, b) 2
(c, d) 1
dtype: int64
每个元组中是否总是只有两个项?是的。每个元组中有两个项。例如,您可以调整此项以使用计数器。或者只是mapfrozenset,data。计算每个列表中出现的字母数作为中间步骤。每个元组中是否始终只有两个项目?是的。每个元组中有两个项。例如,您可以调整此项以使用计数器。或者只是mapfrozenset,data。计算每个列表中出现的字母数作为中间步骤。糟糕的解决方案会浪费计算时间。我不这么认为。说到计算时间,如果你不知道自己到底在寻找什么,那就太可笑了。请下次再好好看看:问这个问题的凯文最后选择了一个和我建议的完全相同的解决方案。糟糕的解决方案浪费了计算时间。我不这么认为。说到计算时间,如果你不知道自己到底在寻找什么,那就太可笑了。请下次再好好看看:问这个问题的凯文最后选择了一个与我建议的完全相同的解决方案。