如何在Python中检查输入中0到9出现的次数并放入列表?

2 投票
3 回答
998 浏览
提问于 2025-04-17 19:04

我该怎么检查输入中数字 09 各出现了多少次,并把结果放到一个列表里呢?

比如说,当有人输入 122033 时,这个函数应该返回下面这个列表:

[1,1,2,2] 
  • result[0]=1 表示数字 0 出现了 1 次
  • result[1]=1 表示数字 1 出现了 1 次
  • result[2]=2 表示数字 2 出现了 2 次
  • result[3]=2 表示数字 3 出现了 2 次

请帮帮我,我在这方面卡了有一两天了。它说我应该用 result = 10 * [0] 来开始。

这里有一个输出的例子:

Enter a string of numbers: 4567899678
4 occurs 1 time
5 occurs 1 time
6 occurs 2 times
7 occurs 2 times
8 occurs 2 times
9 occurs 2 times

到目前为止,我试过这个,但我觉得这不是我应该做的。

def countdigits(aString):
    d = {}
    for i in aString:
        if i in d:
            d[i] = d[i]+1
        else:
            d[i] = 1
    return d
def main():
    aString=input("Enter numbers:")
    print(countdigits(aString))
main()

3 个回答

0

去掉零:

def count_digits(s):
    res = [0]*10
    for x in s:
        res[int(x)] += 1
    while 0 in res:
        re.remove(0)
    return res
2

虽然你的任务用比如说 Counter 这种方法解决会更好,正如其他答案所提到的,但这并不符合使用 result = 10 * [0] 的提示。下面是预期的解决方案:

def digit_count(number):
    # Make sure number is a string
    number = str(number)
    counts = [0] * 10
    for digit in number:
        counts[int(digit)] += 1
    return counts

counts = digit_count(122033)

for digit, count in enumerate(counts):
    if count == 0:
        continue
    print "{0} occurs {1} time{2}".format(
        digit, count, "" if count == 1 else "s")

请注意,digit_count 只接受正整数或者数字字符串。如果你传入负数、小数或者复数,它会抛出一个值错误(ValueError)。

3
>>> import collections
>>> a = collections.Counter([1,1,2,2])
>>> a
Counter({1: 2, 2: 2})
>>> a[1]
2 
>>> a[2]
2
>>> 
def count_digits(s):
    res = [0]*10
    for x in s:
        res[int(x)] += 1
    return res

如果你不应该使用 collections

撰写回答