[尝试交换字符串中的所有元音,原始字符串在下面。我将所有元音及其对应的索引都放在元组列表中。
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。
但是字符串没有改变。
您正在遍历所有列表,将第一个与最后一个交换,而不是将最后一个与第一个交换,所以您回到了起点。循环到列表的中间:
for old, new in e[:len(e) // 2]:
s[old], s[new] = s[new], s[old]
交换的所有内容,交换了两次...如果将0
交换为8
,然后将8
交换为0
,则将它们全部恢复为原始顺序。
不要为相同的元素交换两次。
您可以将映射转换为反向查找字典,以便可以在映射中相应地映射列表的索引:
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']