在Python中连续计算相同的列表元素

时间:2019-11-16 19:06:17

标签: python list

我正在使用Python3。我有一个仅包含整数的列表a。现在,我想保存该元素及其在另一个列表中重复出现的数字。

示例:

a = [6, 0, 0, 2, 2, 2, 2, 1, 89, 89]
  

输出:

result = ["6,1", "0, 2", "2, 4", "1, 1", "89, 2"]    
# the number before the "," represents the element, the number after the "," represents how many times it repeats itself.

如何有效地实现我的目标?

6 个答案:

答案 0 :(得分:1)

用于计数单个元素, 我们list.count

即,在这里,例如2,我们使用 a.count(2), 输出4

此外, set(a)给出了a

中的唯一元素

总体答案

a = [6, 0, 0, 2, 2, 2, 2, 1, 89, 89]
nums = set(a)
result = [f"{val}, {a.count(val)}" for val in set(a)]
print(result)

给出

['0, 2', '1, 1', '2, 4', '6, 1', '89, 2']

答案 1 :(得分:1)

  

方法1:使用 for循环

a = [6, 0, 0, 2, 2, 2, 2, 1, 89, 89]
result = []
a_set = set(a) # transform the list into a set to have unique integer
for nbr in a_set:
    nbr_count = a.count(nbr)
    result.append("{},{}".format(nbr, nbr_count))

print(result) # ['0,2', '1,1', '2,4', '6,1', '89,2']
  

方法2:使用 list-comprehensions

result = ["{},{}".format(item, a.count(item)) for item in set(a)]
print(result) # ['0,2', '1,1', '2,4', '6,1', '89,2']

答案 2 :(得分:0)

您可以使用Python List count()方法,该方法返回具有指定值的元素数。

a = [6, 0, 0, 2, 2, 2, 2, 1, 89, 89]

print ({x:a.count(x) for x in a})

输出:

{6: 1, 0: 2, 2: 4, 1: 1, 89: 2}

答案 3 :(得分:0)

a = [6, 0, 0, 2, 2, 2, 2, 1, 89, 89]
dic = dict()
for i in a:
     if(i in dic):
             dic[i] = dic[i] + 1
     else:
             dic[i] = 1

result = []
for i in dic:
     result.append(str(i) +"," + str(dic[i]))

或者:

from collections import Counter
a = [6, 0, 0, 2, 2, 2, 2, 1, 89, 89]
mylist = [Counter(a)]
print(mylist)

答案 4 :(得分:0)

您可以在集合中使用jQuery

Counter

答案 5 :(得分:0)

我相信给出的所有解决方案都是在计算列表中某个数字的总出现次数,而不是在计算一个数字的重复次数。

这是从itertools使用groupby的解决方案。它会收集运行并将其附加到以数字为键的字典中。

from itertools import groupby

a = [6, 0, 0, 2, 2, 2, 2, 1, 89, 89]
d = dict()

for k, v in groupby(a):
    d.setdefault(k, []).append(len(list(v)))

创建词典:

>>> d
{6: [1], 0: [2], 2: [4], 1: [1], 89: [2]}

请注意,所有运行的列表中只有1个计数。如果在其他地方已经出现过数字,那么列表中将有多个计数(这是字典的值)。