【问题标题】:How can you replace an item of list on python by index如何通过索引替换python上的列表项
【发布时间】:2017-03-31 11:46:58
【问题描述】:

无论出于何种原因(我应该使用 JS),我正在使用 Python 创建一个加密/解密程序。在加密程序中,空格是胡萝卜(^)。在解密程序中我有:

msg = raw_input("Msg: ")
dmsg = list(msg)
for i in dmsg:
    if i == "^":
        dmsg[i] = " "
print dmsg

当给定字符串“^^^”时,输出是...“TypeError: list indices must be integers, not Unicode”。我正在寻找的只是一个函数或语句。

【问题讨论】:

  • 我在 Windows 10 上,我正在使用 IDLE
  • Windows 10 支持 IDLE 就好了。
  • i 不是dmsg 的索引
  • 想想你在 for 循环中究竟迭代了什么。你的错误应该会变得清晰。

标签: python list encryption indexing


【解决方案1】:

您正在迭代列表元素,但稍后您将该元素用作需要整数的索引。 看起来你想要的应该如下

msg = raw_input("Msg: ")
dmsg = list(msg)
for i in range(len(dmsg)):
    if msg[i] == "^":
        dmsg[i] = " "
print dmsg

msg = raw_input("Msg: ")
dmsg = list(msg)
for n,i in enumerate(dmsg):
    if i == "^":
        dmsg[n] = " "
print dmsg

更好的方法可以使用str.replace方法

msg = raw_input("Msg: ")
dmsg = msg.replace('^', ' ')

【讨论】:

    【解决方案2】:
    for i in dmsg:
    

    此代码是迭代列表中的所有元素,而不是索引。

    尝试使用替换字符串。无需转换为列表

    msg = raw_input("Msg: ")
    dmsg = msg.replace('^',' ')
    

    【讨论】:

      【解决方案3】:

      请这样做

      for i in range(len(dmsg)):
          if i == "^":
              dmsg[i] = " "
      

      【讨论】:

      • 虽然这可能会回答问题,但一些 cmets 和/或解释如何以及为什么会很好。这也将帮助其他用户。
      【解决方案4】:

      关注你遇到的错误,

      您可以使用字符进行列表索引,如果您需要改变字符串,您应该使用enumerate

      In [18]: msg = raw_input("Msg: ")
          ...: dmsg = list(msg)
          ...: for index, ch in enumerate(dmsg):
          ...:     if ch == "^":
          ...:         dmsg[index] = " "
          ...: print dmsg
          ...: 
      Msg: My Message^faf
      ['M', 'y', ' ', 'M', 'e', 's', 's', 'a', 'g', 'e', ' ', 'f', 'a', 'f']
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-30
        • 1970-01-01
        • 1970-01-01
        • 2011-11-06
        • 2022-11-27
        • 1970-01-01
        • 2019-03-25
        • 1970-01-01
        相关资源
        最近更新 更多