2

如何检查0 1 2 3 4 5 6 7 8 9输入中出现的次数并将其放入列表中。

例如,在有人输入后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 次

请帮助我在一两天内一直坚持如何做到这一点。它说我想使用结果= 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()
4

3 回答 3

3
>>> import collections
>>> a = collections.Counter([1,1,2,2])
>>> a
Counter({1: 2, 2: 2})
>>> a[1]
2 
>>> a[2]
2
>>> 

如果您不应该使用collections

def count_digits(s):
    res = [0]*10
    for x in s:
        res[int(x)] += 1
    return res
于 2013-03-14T09:55:57.920 回答
2

尽管使用 eg 可以更好地解决您的任务Counter,就像其他答案所暗示的那样,但它不符合 using 的提示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。

于 2013-03-14T10:10:03.397 回答
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
于 2013-03-14T12:38:43.967 回答