a = ['also', 'akin', 'akee', 'ague', 'aero',
'anes', 'bute', 'byre', 'came', 'case',
'doze', 'down', 'drek', 'drew', 'dyes',
'fret', 'freo']
i = 'e'
b = []
for item in a:
for chr in item:
if chr != i:
b.append(item.replace(chr,"-"))
print(b)
打印结果:
['-lso', 'a-so', 'al-o', 'als-', '-kin', 'a-in', 'ak-n', 'aki-', '-kee', 'a-ee', '-gue', 'a-ue', 'ag-e', '-ero', 'ae-o', 'aer-', '-nes', 'a-es', 'ane-', '-ute', 'b-te', 'bu-e', '-yre', 'b-re', 'by-e', '-ame', 'c-me', 'ca-e', '-ase', 'c-se', 'ca-e', '-oze', 'd-ze', 'do-e', '-own', 'd-wn', 'do-n', 'dow-', '-rek', 'd-ek', 'dre-', '-rew', 'd-ew', 'dre-', '-yes', 'd-es', 'dye-', '-ret', 'f-et', 'fre-', '-reo', 'f-eo', 'fre-']
在上面的例子中,a
是一个单词列表。对于列表中的每个项目,我想遍历每个字符。如果某个字符不是字母'e'
,请用短划线'-'
替换该字符。
因此,没有"also"
的单词'e'
应该变为"----"
,而不是四个不同的项目,每个项目都有不同位置的短划线。
任何建议都表示赞赏。
由于
答案 0 :(得分:2)
使用列表理解和join:
lst = ['also', 'akin', 'akee', 'ague', 'aero',
'anes', 'bute', 'byre', 'came', 'case',
'doze', 'down', 'drek', 'drew', 'dyes',
'fret', 'freo']
i = 'e'
new_lst = []
for item in lst:
new_lst.append(''.join('-' if c != i else c for c in item))
print new_lst
输出:
['----', '----', '--ee', '---e', '-e--', '--e-', '---e', '---e', '---e', '---e', '---e', '----', '--e-', '--e-', '--e-', '--e-', '--e-']
答案 1 :(得分:1)
我可能会建议在这里使用正则表达式替换。
创建一个匹配所有非e字符的正则表达式,并映射一个函数,该函数用' - '替换每个非e字符。 a
中的每个元素。
import re
not_e = re.compile(r'[^e]')
b = map(lambda word: not_e.sub('-', word), a)
以上代码的一个衬垫:
b = map(lambda word: re.sub(r'[^e]', '-', word), a)
如果你想坚持使用更详细的语法,你也可以在问题中循环并追加。
for word in a:
b.append(non_e.sub('-', word))
答案 2 :(得分:0)
在循环的最里面,您正在扫描每个字母。但是在您拥有的代码中,您将在b
附加一个项目。因此,对于输入的每个字母,您将拥有完整的输出字符串 - 而不是您想要的内容。
试试这个:
for item in a:
bitem = ''
for chr in item:
if chr != i:
bitem += '-'
else:
bitem += chr
b.append(bitem)
话虽如此,还有其他方法可以实现这一点,这可能更简单。 请参阅其他技巧的其他优秀答案 - 我只是给出了原始代码的更正版本。
答案 3 :(得分:0)
a = ['also', 'akin', 'akee', 'ague', 'aero',
'anes', 'bute', 'byre', 'came', 'case',
'doze', 'down', 'drek', 'drew', 'dyes',
'fret', 'freo']
i = 'e'
for b in range(0, len(a)):
k = list(a[b])
for i in range(0, len(k)):
if k[i] != 'e':
k[i] = '-'
k = ''.join(k)
a[b] = k
使用双for
个循环,一个用于获取每个单词,另一个用于循环遍历每个单词。从那里,您可以检查每个是否是' e。
输出:
['----', '----', '--ee', '---e', '-e--', '--e-', '---e', '---e', '---e', '---e', '---e', '----', '--e-', '--e-', '--e-', '--e-', '--e-']
答案 4 :(得分:0)
不需要花哨的循环:
[''.join(c if c == 'e' else '-' for c in s) for s in a]