在Python中将数字作为字符串计数
我是python的新手。我一直试图数到1-9出现在一个列表中,但是Python不计算数字,总是考虑为1,而不为1-9的出现增加更多的计数。有人能帮我理解为什么吗在Python中将数字作为字符串计数,python,numbers,counter,Python,Numbers,Counter,我是python的新手。我一直试图数到1-9出现在一个列表中,但是Python不计算数字,总是考虑为1,而不为1-9的出现增加更多的计数。有人能帮我理解为什么吗 #code for nmb in ls: if nmb is not ls: frstdic[nmb] = 1 else: frstdic[nmb] = frstdic[nmb] + 1 prin
#code
for nmb in ls:
if nmb is not ls:
frstdic[nmb] = 1
else:
frstdic[nmb] = frstdic[nmb] + 1
print (frstdic)
#return
{'1': 1, '2': 1, '3': 1, '4': 1, '5': 1, '6': 1, '7': 1, '8': 1, '9': 1}
# nmb is a string
代码中存在逻辑错误(请参阅注释)。考虑使用计数器或默认字典:
from collections import Counter, defaultdict
#1
frstdic = defaultdict(int)
for nmb in ls:
frstdic[nmb] += 1
#2
frstdic = Counter(ls)
在短序列上,计数器方法的速度大约慢4倍,但对我来说似乎更优雅。你能分享一个示例输入和你试图得到的结果吗?你是说你对
nmb不是ls感到惊讶吗?
总是正确的?@ChrisCharley在之后,对于ls中的nmb:
没有多大意义。另外,它的语法无效。Python不是那么健谈:-)如果nmb不在frstdic:中,您应该检查。或者更好的方法是使用defaultdict
@superb rain是的,我不认为这很好:)@superbrain即使语法错误被修复,也有一个逻辑错误/“计数器方法大约慢4倍”——计数器方法不是真的更快吗?@DarrylG不,根据%timeit
@superbrain事实上,你是对的。这只是一个逻辑错误。没关系,好的。我想你是说缩进错误。你到底做了什么?