为了账号安全,请及时绑定邮箱和手机立即绑定

为什么不能做交换到列表

为什么不能做交换到列表

LEATH 2022-08-25 16:01:44
尝试交换字符串中的所有元音,原始字符串在下面。我把所有元音及其对应词的索引放到一个元组列表中。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 workprint(s)我希望 s 变成:['o', 'd', 'u', 'f', 'i', 'g', 'e', 'k', 'a']交换 a 和 o, e 和 u。但字符串没有改变。
查看完整描述

3 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

你交换的所有东西,你交换了两次...如果与 交换,则使用 ,则将其全部按原始顺序放回原来。0880

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


查看完整回答
反对 回复 2022-08-25
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

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

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


查看完整回答
反对 回复 2022-08-25
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

您可以将映射转换为反向查找命令,以便在列表位于映射中时可以相应地映射列表的索引:

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']


查看完整回答
反对 回复 2022-08-25
  • 3 回答
  • 0 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信