如何使用相应的索引替换字符串中的替代字符而不进行迭代?例如:
'abcdefghijklmnopqrstuvwxyz'
应该返回:
'a1c3e5g7i9k11m13o15q17s19u21w23y25'
我有以下代码来实现这一目标。 但是有没有办法跳过循环或更多pythonic方式来实现这个:
string = 'abcdefghijklmnopqrstuvwxyz'
new_string = ''
for i, c in enumerate(string):
if i % 2:
new_string += str(i)
else:
new_string += c
其中new_string
保持我所需的值
答案 0 :(得分:2)
您可以使用list comprehension,并使用str.join()
重新加入字符;后者避免重复(慢)字符串连接):
newstring = ''.join([str(i) if i % 2 else l for i, l in enumerate(string)])
请注意,您无法在此处回避迭代。即使你在这里定义了一个大的预先字符串化的奇数列表(odds = [str(i) for i in range(1, 1000, 2)]
),然后重新使用它来在列表string_list[1::2] = odds[:len(string) // 2]
上使用切片赋值,Python必须在底层迭代以重新分配指数。这是使用任意长度序列的本质。