为什么不能做交换到列表

尝试交换字符串中的所有元音,原始字符串在下面。我把所有元音及其对应词的索引放到一个元组列表中。


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。


但字符串没有改变。


LEATH
浏览 85回答 3
3回答

慕娘9325324

你交换的所有东西,你交换了两次...如果与 交换,则使用 ,则将其全部按原始顺序放回原来。0880不要对相同的元素进行两次交换。

慕雪6442864

您正在迭代 all 列表,将第一个列表与最后一个列表交换,将最后一个列表与第一个列表交换,因此您又回到了起点。迭代到列表的中间:for old, new in e[:len(e) // 2]:     s[old], s[new] = s[new], s[old]

慕田峪9158850

您可以将映射转换为反向查找命令,以便在列表位于映射中时可以相应地映射列表的索引: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']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python