【问题标题】:How to overwrite list in Python如何在 Python 中覆盖列表
【发布时间】:2019-11-14 18:41:51
【问题描述】:

我写了一些关于如何覆盖列表的代码,幸运的是它可以工作,但不太明白它是如何工作的。如果我尝试理解我自己的代码,列表 numbs 的长度为 5,当与 range 方法结合使用时,我要求我的循环循环 5 次,对吗?

我的问题的第二部分与 numbs[w] 有关。 numbs[w] 是否引用列表中的元素?到目前为止,我已经了解到 numbs_list[1] 引用了 numbs_list 中的位置 1,但我不确定 numbs[w] 在等式的左侧和右侧是如何工作的。

这是我在这里的第一篇文章,谢谢你的帮助!

numbs = [5, 10, 15, 20, 25]

for w in range(len(numbs)):
    numbs[w] = numbs[w] + 5

print(numbs)

实际输出是[10, 15, 20, 25, 30],这正是我想要的。

【问题讨论】:

标签: python python-3.x list overwrite


【解决方案1】:
for w in range(len(numbs)):

  numbs[w] = numbs[w] + 5

  print(numbs)

这里, len(numbs)=5,因此 range() 返回数字序列(0 到 4)[range() documentaion 示例]

numbs[0] 指的是列表的第一个元素(即 5)

【讨论】:

    【解决方案2】:

    好的,所以有优先级意味着代码的某些部分在其他部分之前被评估。如果您有赋值运算符 (=),则始终在赋值发生之前计算右侧。

    所以,

    numbs[w] = numbs[w] + 5
    

    这样评估

    # w gets the value from the for loop i.e. 0-4
    numbs[0] + 5 # numbs[0] is 5, so this evaluates to 10
    numbs[0] = 10 # the assignment takes place after the right side is evaluated
    

    这就是您的列表最终使每个元素增加 5 的方式

    还要注意,numbs[w] = numbs[w] + 5 可以写成 numbs[w] += 5

    【讨论】:

      【解决方案3】:

      至于您的第一个问题,是的,您要求它循环 5 次。 但这是范围的工作原理: range(n) 创建从 0 到 n-1 而不是 1 到 n 的数字序列。 因此,

      for w in range(len(numbs)):
      

      将 w 的值从 0 迭代到 4,即 (5-1)

      现在,关于你的第二个问题:

      是的,您的代码引用了 numbs 的元素。 列表是零索引的,即元素的索引从 0 到 n-1。因此无论何时 使用 numbs[w],访问索引 w 处的 numbs 元素。

      例如。 numbs[0] = 5,numbs[1] = 10 以此类推

      【讨论】:

        【解决方案4】:

        我建议您将问题分解为小块,不要尝试同时使用多个您不了解的功能。使用您的打印语句来解决这个问题。

        numbs = [5, 10, 15, 20, 25]
        
        #see what value you get from range(len(numbs))
        print('range(len(numbs)) = ', range(len(numbs)))
        
        for w in range(len(numbs)):
            #what is the value of w?
            print('w = ', w)
        
            #print numbs[w] before it is changed
            print('numbs[w] = ', numbs[w])
        
            numbs[w] = numbs[w] + 5
        
            #print numbs[w] after it is changed
            print('numbs[w] = ', numbs[w])
        
            #add another print to separate the loops
            print()
        
        #print numbs after the for each loop has ran
        print('new numbs = ', numbs)
        

        然后您可以将它们放在一起并弄清楚发生了什么。

        【讨论】:

          猜你喜欢
          • 2020-11-17
          • 2014-10-14
          • 1970-01-01
          • 2014-01-01
          • 2015-01-15
          • 2015-10-04
          • 2011-06-02
          • 2021-03-18
          • 2018-06-29
          相关资源
          最近更新 更多