【问题标题】:Change values in a list using a for loop (python)使用 for 循环(python)更改列表中的值
【发布时间】:2019-07-25 06:06:01
【问题描述】:

我目前有一些代码如下所示:

letters = {
10 : "A",
11 : "B",
12 : "C",
13 : "D",
14 : "E",
15 : "F"
}
vallist = [rd1, rd2, gd1, gd2, bd1, bd2]
for i in vallist:
    if i >= 10:
        i = letters[i]

我想要发生的是 for 循环遍历 vallist 并将任何大于 10 的值替换为其对应的字母。但是,我当前的代码只是更改了i,而不是列表中的原始值。例如,如果 rd1 设置为 15,则代码会运行并且 i 设置为 "F",但 rd1 不会更改为 "F",而是保持为 15。我该如何解决这个?

【问题讨论】:

    标签: python python-3.x list for-loop


    【解决方案1】:

    实际上 i 是该数组元素的引用,值的变化不会影响该元素,而是试试这个,

    # 遍历数组的每个索引

    for i in range(len(vallist)):
     if vallist[i] >= 10 and vallist[i]<=15:
          vallist[i] = letters[vallist[i]]
    

    【讨论】:

      【解决方案2】:

      对于for 循环的每次迭代,变量i 仅分配有vallist 中项目值的副本,因此对i 所做的更改不会反映在i 中.

      您应该通过索引更新i 的项目,您可以使用enumerate 函数生成:

      for index, value in enumerate(vallist):
          if value >= 10:
              vallist[index] = letters[value]
      

      【讨论】:

      • 我认为这种说法是不正确的:“[...] 变量i 仅分配了vallist 中项目值的副本,[...]” .根据Ned Batchelder's guide“分配从不复制数据”。 for 循环也是一个赋值;在这种情况下,它使i 引用了一个已经被vallist 中的项目引用的值。这是i = letters[i] 行,现在i 指的是另一个值,在这种情况下是letters[i] 的值,例如字符串“A”。作者的代码示例不涉及复制。
      【解决方案3】:
      for i in range(len(vallist)):
          if vallist[i] >= 10:
              vallist[i] = letters[i]
      

      因为在您的情况下,i 只是 vallist 中当前项目的副本。但是这样我将成为一个索引,所以你可以通过它修改你的原始列表。

      【讨论】:

        【解决方案4】:
        rd1, rd2, gd1, gd2, bd1, bd2 = 10, 11, 12, 13, 14, 9
        letters = {
        10 : "A",
        11 : "B",
        12 : "C",
        13 : "D",
        14 : "E",
        15 : "F"
        }
        vallist = [rd1, rd2, gd1, gd2, bd1, bd2]
        for index, value in enumerate(vallist):
            if value >= 10 and value <= 15:
                vallist[index] = letters[value]
        print(vallist)
        

        正如另一条评论中提到的,您在遍历您的 vallist 时需要索引和值。这样您就可以将索引上的值替换为字典中的值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-05
          • 2018-12-01
          • 1970-01-01
          • 2021-10-09
          • 2021-06-21
          • 2022-12-31
          相关资源
          最近更新 更多