或者用相应的索引

时间:2016-10-03 14:00:42

标签: python string list-comprehension

如何使用相应的索引替换字符串中的替代字符而不进行迭代?例如:

'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保持我所需的值

1 个答案:

答案 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必须在底层迭代以重新分配指数。这是使用任意长度序列的本质。