为什么不能交换到列表

问题描述 投票:0回答:3

[尝试交换字符串中的所有元音,原始字符串在下面。我将所有元音及其对应的索引都放在元组列表中。

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。

但是字符串没有改变。

python swap
3个回答
1
投票

您正在遍历所有列表,将第一个与最后一个交换,而不是将最后一个与第一个交换,所以您回到了起点。循环到列表的中间:

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

2
投票

交换的所有内容,交换了两次...如果将0交换为8,然后将8交换为0,则将它们全部恢复为原始顺序。

不要为相同的元素交换两次。


1
投票

您可以将映射转换为反向查找字典,以便可以在映射中相应地映射列表的索引:

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']
© www.soinside.com 2019 - 2024. All rights reserved.