1

私は次のようなより一般的な問題を解決しようとしています。以下では、vow_arrayを取得します。これは、たとえば、プログラムに送信されたテキストに母音のサブセットが存在することを示します。各母音の存在を0または1として印刷する必要があります。

ch_a = 0
ch_e = 0
ch_i = 0
ch_o = 0
ch_u = 0

# vow_array is generated at runtime; here is an example
vow_array = ['a', 'o', 'u']

if 'a' in vow_array:
    ch_a = ch_a + 1
if 'e' in vow_array:
    ch_e = ch_e + 1
if 'i' in vow_array:
    ch_i = ch_i + 1
if 'o' in vow_array:
    ch_o = ch_o + 1
if 'u' in vow_array:
    ch_u = ch_u + 1

print ch_a, ch_e, ch_i, ch_o, ch_u

このコードは長すぎてエラーが発生しやすいと思います。これを書くためのよりコンパクトな方法はありますか?また、アルファベットのすべての「文字」に対してこれを行う必要がある場合は、コードを繰り返す必要はないとします。

4

3 に答える 3

6

間違いなく。

ch_a同じプレフィックス( 、、ch_e...)を持つ変数がある場合は、辞書またはリストを使用してそれらをグループ化する必要があります。

vowels = {
    'a': 0,
    'e': 0,
    'i': 0,
    'o': 0,
    'u': 0
}

vowel_array = ['a', 'o', 'u']

for vowel in vowels.keys():
    if vowel in vowel_array:
        vowels[vowel] += 1

print vowels

よりPythonicなソリューションは、次のようになります。

>>> from collections import Counter
>>>
>>> letters = 'i am a sentence'
>>> Counter(letters)
Counter({' ': 3, 'e': 3, 'a': 2, 'n': 2, 'c': 1, 'i': 1, 'm': 1, 's': 1, 't': 1})
于 2012-10-20T00:30:17.930 に答える
1

@Blenderと同じ考えですが、辞書を初期化する方法が異なります(Python> 2.7のdict理解でこれを行うことができます):

>>> vowels = dict((v, 0) for v in 'aeiou')
>>> vow_array = ['a', 'o', 'u']
>>> for vow in vow_array:
...   vowels[vow] += 1
>>> vowels
{'e': 0, 'i': 0, 'o': 1, 'u': 1, 'a': 1}

そして、それが懸念事項である場合:

>>> for value in sorted(vowels):
...   print '{0}: {1}'.format(value, vowels[value])
...
a: 1
e: 0
i: 0
o: 1
u: 1
于 2012-10-20T00:33:18.087 に答える
0

これを試して:

ch_dict = {'a':0,'e':0,'i':0,'o':0,'u':0}
vow_array = ['a','o','u']
for d in vow_array:
   ch_dict[d] = ch_dict[d] + 1

print(ch_dict)
于 2012-10-20T00:33:04.950 に答える