在Python中将数字作为字符串计数

在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

我是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
      
        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事实上,你是对的。这只是一个逻辑错误。没关系,好的。我想你是说缩进错误。你到底做了什么?