我希望计算列表中重复项的总数。然后以字母/数字顺序显示列表项的名称以及重复项的数量。
例如:
-列表
lst = [蓝色,绿色,绿色,黄色,黄色,黄色,橙色,橙色,银色,银色,银色,银色]
-按X计算重复次数
-以排序的列表名称顺序
颜色:蓝色,总计:1
颜色:绿色,总计:2
颜色:橙色,总计:2
颜色:银色,总计:4
颜色:黄色,总计:3
我可以使用字典来完成上述操作,并将列表转换为集合。我的目标是使用Python 3的内置函数在列表类型内完成所有任务。
答案 0 :(得分:0)
您可以将Counter
与most_common
一起使用:
from collections import Counter
lst = ['blue', 'green', 'green', 'yellow', 'yellow', 'yellow', 'orange', 'orange', 'silver', 'silver', 'silver', 'silver']
freq = Counter(lst)
现在让我们按名称排序:
print(sorted(freq.most_common(), key=lambda x: x[0])) # [('blue', 1), ('green', 2), ('orange', 2), ('silver', 4), ('yellow', 3)]
没有字典或计数器对象,“手动”方式是先按字母顺序对列表进行排序,然后在迭代时计算计数。因此,如下所示:
lst = ['blue', 'green', 'green', 'yellow', 'yellow', 'yellow', 'orange', 'orange', 'silver', 'silver', 'silver', 'silver']
lst.sort()
current_color = lst[0] # assuming lst is not empty
count = 0
for c in lst:
if c == current_color:
count += 1
else:
print('Color:', current_color, 'Total:', count)
current_color = c
count = 1
print('Color:', current_color, ', Total:', count) # print the last color
答案 1 :(得分:0)
为什么不看看收藏模块? 计数器功能将帮助您非常简单地实现目标。
答案 2 :(得分:0)
您可以使用itertools.groupby
组合相同颜色的条目。它会生成(key, values)
对的迭代器,其中value是匹配key
的元素的生成器。
我使用简并的sum
来计算值的数量,就像this answer一样,但是还有其他选择。
import itertools
lst = "blue green green yellow yellow yellow orange orange silver silver silver silver".split()
groups = sorted(((key, sum(1 for _ in values))
for (key, values) in itertools.groupby(lst)))
for color, count in groups:
print("Color: {}, Total: {}".format(color, count))
答案 3 :(得分:0)
我建议您使用高性能计数器。计数器是一个容器,用于将元素存储为字典键,而其计数则存储为字典值。
import collections
a = ["blue", "green", "green", "yellow", "yellow", "yellow", "orange", "orange", "silver", "silver", "silver", "silver"]
counter = collections.Counter(a)
colors = counter.keys()
for color in colors:
print 'Color: %s, Total: %d' % (color, counter[color])
答案 4 :(得分:0)
根据要求,不使用任何导入,这里仅使用str.count
和列表理解
lista = [
'blue', 'green', 'green', 'yellow', 'yellow', 'yellow', 'orange',
'orange', 'silver', 'silver', 'silver', 'silver'
]
listb = []
for i in lista:
if i not in listb:
listb.append(i)
for i in sorted(listb):
print('Color: {}, Total: {}'.format(i.ljust(6), lista.count(i)))
Color: blue , Total: 1 Color: green , Total: 2 Color: orange, Total: 2 Color: silver, Total: 4 Color: yellow, Total: 3
老实说,您不需要很多工具来完成此操作,如果我刚使用过listb = set(lista)
,但您没有说set
,那么我就把.ljust(6)
投入到娱乐中并输出更漂亮