为什么不能交换列表

why can't do the swap to the list

试图交换字符串中的所有元音,原始字符串如下。 我将所有元音及其对应元音的索引放入元组列表中。

s =['a', 'd', 'e', 'f', 'i', 'g', 'u', 'k', 'o']
e = [(0, 8), (2, 6), (4, 4), (6, 2), (8, 0)]

for el in e:
    old = el[0]
    new = el[1]

    s[old], s[new] = s[new], s[old]#this does not work

print(s)

我希望 s 变成:

['o', 'd', 'u', 'f', 'i', 'g', 'e', 'k', 'a']

交换 a 和 o,e 和 u。

但字符串没有改变。

你交换的所有东西,你交换了两次...如果你把 08 交换,然后 80,你就把它全部放回去了按照原来的顺序。

不要对相同的元素进行两次交换。

您正在遍历所有列表,将第一个与最后一个交换,最后一个与第一个交换,因此您回到了起点。迭代到列表的中间:

for old, new in e[:len(e) // 2]:
    s[old], s[new] = s[new], s[old]

您可以将映射转换为反向查找字典,这样您就可以相应地映射列表的索引(如果它在映射中):

mapping = dict(map(reversed, e))
print([s[mapping.get(i, i)] for i in range(len(s))])

这输出:

['o', 'd', 'u', 'f', 'i', 'g', 'e', 'k', 'a']