Python 列出并计算列表中的所有唯一值

Python List and count all unique values in list

我有一个列表:

originalList = ['Item1', 'Item1', 'Item1', 'Item2', 'Item2', 'Item3', 'Item4']

我需要根据 originalList

创建两个列表

我需要的第一个列表,应该列出所有独特的项目,例如:

['Item1', 'Item2', 'Item3', 'Item4']

而另一个应该列出每个唯一值的计数:

[3, 2, 1, 1]

请帮忙

您可以通过以下方式使用Counter

from collections import Counter
res = dict(Counter(originalList))

获取键将给出结果列表,值将是每个元素的计数。

获取 2 个列表:

keys, values = map(list, zip(*d.items()))

我同意你可以像 David S 提到的那样使用 Counter,但是如果你在列表之后,你可以在 dict 的 .keys() 和 上调用 list() 构造函数。价值观()。完整的代码是这样的:

from collections import Counter

counts = Counter(originalList)  # Counter is a subclass of dict

# for ['Item1', 'Item2', 'Item3', 'Item4']:
list_1 = list(counts.keys())

# for [3, 2, 1, 1]
list_2 = list(counts.values())
originalList = ['Item1', 'Item1', 'Item1', 'Item2', 'Item2', 'Item3', 'Item4']

unique = sorted(set(originalList))

frequency = [originalList.count(x) for x in unique]

print(unique)
print(frequency)

>>> [3, 2, 1, 1]
>>> ['Item1', 'Item2', 'Item3', 'Item4']

使用 set 删除重复项并使用 sorted 对列表进行排序,这将为您提供唯一的列表

然后计算原始列表中每个唯一项目的频率

Jordan Engstrom 提到的方法可以为您找到答案。 另一种方式可以是:

unique_list = sorted(list(set(originalList)))
count_list = []
for item in unique_list:
    count_list.append(original_list.count(item))

如果列表中的项目数量较少,.count() 应该 运行 比 Counter 更快。 您可以在此线程中阅读有关 Counter 性能的更多信息。