2

入力に何回0 1 2 3 4 5 6 7 8 9表示されるかを確認してリストに入れるにはどうすればよいですか。

たとえば、誰かが入力した後122033、関数は次のリストを返す必要があります。

[1,1,2,2] 
  • result[0]=10が1回発生することを意味します
  • result[1]=11が1回発生することを意味します
  • result[2]=22が2回発生することを意味します
  • result[3]=23が2回発生することを意味します

私がこれを行う方法に1日か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

あなたのタスクは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 が発生します。

于 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 に答える