我试图解决类似于以下的更通用的问题.在下面,我得到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
Run Code Online (Sandbox Code Playgroud)
我认为这段代码太长,容易出错.有更紧凑的写作方式吗?另外,如果我必须对字母表中的所有"字母"执行此操作,我不想重复代码.
当然.
如果您的变量具有相同的前缀(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
Run Code Online (Sandbox Code Playgroud)
一个更像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})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1387 次 |
| 最近记录: |