Python 将类对象计数器设置为可用列表
我使用了Counter类来获取迭代次数,现在我想将其格式化为:Python 将类对象计数器设置为可用列表,python,counter,Python,Counter,我使用了Counter类来获取迭代次数,现在我想将其格式化为: from collections import Counter elements = [1,6,9,4,1,2] elements.sort() Val=Counter(elements).keys() #Gives me all the values used : 1,2,4,6,9 Freq=Counter(elements).values() #Gives me the frequency : 2,1,1,1,1, # I w
from collections import Counter
elements = [1,6,9,4,1,2]
elements.sort()
Val=Counter(elements).keys() #Gives me all the values used : 1,2,4,6,9
Freq=Counter(elements).values() #Gives me the frequency : 2,1,1,1,1,
# I want display somethink like :
# 1 : 2
# 2 : 1
# 4 : 1
# 6 : 1
# 9 : 1
#I have tried : but it is a dict Type : I need to convert this Val et Freq to List
for i in range(0,len(Val)):
print(str(Val[i]) +" : "str(Freq[i]))
您可以将它们转换为列表,然后
zip
它们:
from collections import Counter
elements = [1,6,9,4,1,2]
elements.sort()
Val=list(Counter(elements).keys()) #Gives me all the values used : 1,2,4,6,9
Freq=list(Counter(elements).values()) #Gives me the frequency : 2,1,1,1,1,
for i,j in zip(Val,Freq):
print(str(i) + ":" + str(j))
输出:
1:2
2:1
4:1
6:1
9:1
您可以将它们转换为列表,然后
zip
它们:
from collections import Counter
elements = [1,6,9,4,1,2]
elements.sort()
Val=list(Counter(elements).keys()) #Gives me all the values used : 1,2,4,6,9
Freq=list(Counter(elements).values()) #Gives me the frequency : 2,1,1,1,1,
for i,j in zip(Val,Freq):
print(str(i) + ":" + str(j))
输出:
1:2
2:1
4:1
6:1
9:1
您应该只构建一次
计数器。无法保证两个独立的计数器对象将以相同的顺序在其内容上迭代(另外,对于大的输入,这只是低效的)
这里的sorted(Counter(elements).items())
是一个包含元组的排序列表(val,freq)
:
[(1,2)、(2,1)、(4,1)、(6,1)、(9,1)]
您应该只构建一次计数器。无法保证两个独立的计数器对象将以相同的顺序在其内容上迭代(另外,对于大的输入,这只是低效的)
这里的sorted(Counter(elements).items())
是一个包含元组的排序列表(val,freq)
:
[(1,2),(2,1),(4,1),(6,1),(9,1)]
这是可行的,但是当dict类型已经有了一个方法,其全部目的是并行地迭代键和值时,创建独立的iterable对象并将它们压缩在一起似乎有点迂回,为什么要转换为列表?在Python3.6之前,您的结果可能不会按排序顺序结束。正如Kevin提到的Val=list(Counter(elements).keys());Freq=列表(计数器(元素).values());zip(Val,Freq)
是书写计数器(elements.items()
的一种非常简便的方法。用sorted()
将其包装起来,一切都很好。但这也是Patrick Haugh的答案。这是可行的,但创建独立的可编辑对象并将它们压缩在一起似乎有点迂回,因为dict类型已经有了一个方法,其全部目的是并行迭代键和值。而且,为什么要转换为列表?在Python3.6之前,您的结果可能不会按排序顺序结束。正如Kevin提到的Val=list(Counter(elements).keys());Freq=列表(计数器(元素).values());zip(Val,Freq)
是书写计数器(elements.items()
的一种非常简便的方法。用sorted()
将其包装起来,一切都很好。但这也是Patrick Haugh的答案,虽然我不会指望两个计数器对象以相同的顺序迭代(如果只需要一个,我也不会浪费时间构建两个计数器对象),但是插入顺序会改变迭代顺序。考虑到这些计数器对象是在同一个进程中的同一次运行中,以相同的顺序从相同的数据创建的,如果迭代顺序出现分歧,我会感到惊讶。(同一进程中的同一次运行”免责声明是为了解释散列随机化。)@StevenRumbalski我能找到的关于这个主题的最接近文档的东西是:虽然这似乎意味着相同的iterables应该产生相同的dicts/计数器,这看起来绝对像是一种实现细节,围绕它构建代码是不安全的。虽然我不会指望两个计数器对象以相同的顺序迭代(当只需要一个计数器对象时,我也不会浪费时间构建两个计数器对象),但会改变迭代顺序的是插入顺序。考虑到这些计数器对象是在同一个进程中的同一次运行中,以相同的顺序从相同的数据创建的,如果迭代顺序出现分歧,我会感到惊讶。(同一进程中的同一次运行”免责声明是为了解释散列随机化。)@StevenRumbalski我能找到的关于这个主题的最接近文档的东西是:虽然这似乎意味着相同的iterables应该产生相同的dicts/计数器,这看起来绝对像是构建代码时不安全的实现细节。