首先,您不需要这样做:
vaw = ['b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','z']
… 得到一个字符序列。字符串已经是一个字符序列。(对于. var1
_ _ _ _list
此外,您的代码实际上不起作用,因为string == string in vaw
与 相同True in vaw
,这总是错误的。我想你的意思是if string in vaw
。当我们在这里时,我不会调用变量string
,因为那是内置模块的名称。
并且您可以通过在标准 Python 样式 (PEP8) 不允许的地方添加额外的空格来节省一些击键。:)
所以:
def translate(var1):
vaw = 'bcdfghjklmnpqrstvwxz'
var1 = list(var1)
for s in var1:
if s in vaw:
var1[var1.index(s)] = s + 'o' + s
print ''.join(var1)
接下来,如果你想要每个元素的索引var1
,你不想把它扔掉,然后再用index
. 除了更多的代码和更慢的速度之外,它还会为您多次出现的任何元素给出错误的答案。所以:
def translate(var1):
vaw = 'bcdfghjklmnpqrstvwxz'
var1 = list(var1)
for i, s in enumerate(var1):
if s in vaw:
var1[i] = s + 'o' + s
print ''.join(var1)
如果您想var
就地改变列表,这大约是您可以做到的。您可以将其更改为 do var1[i+1:i+1] = 'o' + s
,在现有元素之后插入新元素,但随后您必须迭代副本var1
(在迭代时不能更改任何东西的形状),并且您必须跟踪你的索引是如何变化的,等等。
建立一个新结构通常比修改旧结构要简单得多。这就是列表推导、生成器表达式、map
、filter
等的用途。对于原始列表的每个元素s
,你想要s + 'o' + s
它是否在 中vaw
,s
否则,对吗?你可以把它翻译成 Python:
def translate (var1):
vaw = 'bcdfghjklmnpqrstvwxz'
new_var1 = (s + 'o' + s if s in vaw else s for s in var1)
return ''.join(new_var1)