为什么不能交换列表
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。
但字符串没有改变。
你交换的所有东西,你交换了两次...如果你把 0
和 8
交换,然后 8
和 0
,你就把它全部放回去了按照原来的顺序。
不要对相同的元素进行两次交换。
您正在遍历所有列表,将第一个与最后一个交换,最后一个与第一个交换,因此您回到了起点。迭代到列表的中间:
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']
试图交换字符串中的所有元音,原始字符串如下。 我将所有元音及其对应元音的索引放入元组列表中。
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。
但字符串没有改变。
你交换的所有东西,你交换了两次...如果你把 0
和 8
交换,然后 8
和 0
,你就把它全部放回去了按照原来的顺序。
不要对相同的元素进行两次交换。
您正在遍历所有列表,将第一个与最后一个交换,最后一个与第一个交换,因此您回到了起点。迭代到列表的中间:
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']