2017-01-12 6 views
-4

は私が持っているべきである私は、文字列どのように増分で文字列を数えますか?

a="1423" 
astr=str(a) 
aspl=list(astr) 

に変更数の配列を有する[ '1'、 '4'、 '2'、 '3']。 配列内に1〜9の数が含まれていることを確認したかったので、 1 = 1回、2 = 1回... 5 = 0回、6 = 0回(s) )...これまで

私のソリューションは、

r=0 
for r > 11: 
    b = aspl.count(r) 

だったが、それは文字列であるため、この方法では動作しません。 ご想像の通り、私は

b = aspl.count('r') 

その後、使用してみました、それはRのみを探しています。 これについてどう思いますか?

ありがとうございます。

答えて

5

のpython collectionsモジュールは、ちょうどそのためCounterを提供しています。その後、

from collections import Counter 

a = '032143487214093120' 

count = Counter(a) 
print(count) 
# Counter({'2': 3, '4': 3, '1': 3, '0': 3, '3': 3, '9': 1, '7': 1, '8': 1}) 

、あなたはそれも主張すれば

for digit in (str(i) for i in range(10)): 
    print('{}: {}x'.format(digit, count[digit])) 

# 0: 3x 
# 1: 3x 
# ... 
# 5: 0x 
# ... 

で印刷あなたの文字列に現れない桁がカウンタに表示されます。カウンターのすべての数字がゼロに設定されます:

count = Counter({str(i): 0 for i in range(10)}) 
print(count) # Counter({'2': 0, '4': 0, '9': 0, '0': 0, '8': 0, '3': 0, 
       #   '1': 0, '7': 0, '5': 0, '6': 0}) 
count.update(a) 
print(count) # Counter({'2': 3, '4': 3, '0': 3, '3': 3, '1': 3, '9': 1, 
       #   '8': 1, '7': 1, '5': 0, '6': 0}) 
+1

OPは、印刷したいですあなたの解決策の場合には存在しない0の文字列で利用できない数字 –

+1

@MoinuddinQuadriは、 'Counter 'はゼロです。 –

+0

はい、それは真ですが、明示的に呼び出さない限り、* number *キーはdictで利用できません。 –

1
for i in range(10): 
    print s.count(str(i)) 

私は推測する...

0

ここでタプルの一連の結果を生成し、別の可能な解決策はあります:

s = '1423' 
numbers = list(range(1, 10)) 
print(list((i, s.count(str(i))) for i in numbers)) 

出力

[(1, 1), (2, 1), (3, 1), (4, 1), (5, 0), (6, 0), (7, 0), (8, 0), (9, 0)] 
関連する問題