【问题标题】:For loop in Python3, using variable[i-1]Python3中的for循环,使用变量[i-1]
【发布时间】:2018-01-14 11:48:44
【问题描述】:

我需要帮助,每次我在 Python3 中使用 for 循环,例如:

for i in range(len(sequence)):

我写:

sequence[i-1]

在第一个循环中,它获取序列的最后一个数字,我该如何更改?

示例:

a=(10,15,20)
for i in range(len(a)):
    a[i]=a[i-1]+a[i]

我想得到

[10,25,35]

但我明白了

[45,25,35]

【问题讨论】:

  • 你希望它在第一次迭代中得到什么?
  • 实现这一点的通用方法可能是从 index=0 开始,添加 next(iter) 并在 StopIterationError 发生时停止

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


【解决方案1】:

使用range(1,len(a)),因为如果你使用range(len(a)),那么迭代将从0开始,这将导致a[i-1]成为a[-1],这将产生最后一个值。

【讨论】:

    【解决方案2】:

    回答标题中的问题:a[-1] 将始终为您提供最后一个元素,您无法更改它。

    但你仍然可以让你的代码工作:

    首先,除了您询问的问题之外,您的代码中还有几个问题:

    • 您当前的代码甚至无法运行,您无法在元组中重新分配值
    • 即使 a 是一个列表,它也不会为您提供所需的输出,因为您会随时更改值,所以第一对之后的所有内容都是错误的

    我假设你想要做的是将所有对相加并用对替换每个数字,除了第一个数字应该相同

    您可以通过多种方式做到这一点,但这里有一个非常简单易懂的方式:

    a = [10,15,20]
    b = [a[0]]
    for i in range(1,len(a)):
        b.append(a[i] + a[i-1])
    

    现在b 看起来像这样:[10, 25, 35]

    或者如果你想在没有额外列表的情况下这样做,你可以反过来:

    a = [10,15,20]
    for i in range(len(a),1,-1):
         a[i] = a[i] + a[i-1])
    

    【讨论】:

      【解决方案3】:

      试试这个:

      a=[10,15,20]
      b=[a[i]+a[i-1] for i in range(1,len(a))]
      b.insert(0,a[0])
      print(b)
      

      输出:

      [10, 25, 35]
      

      【讨论】:

        【解决方案4】:

        也可以尝试完全删除索引(第一个除外):

        a = (10, 15, 20)
        result = [a[0]] + [(x + y) for x, y in zip(a[:-1], a[1:])]
        assert result == [10, 25, 35]
        

        【讨论】:

          【解决方案5】:

          在 for 循环的第一次迭代中,i=0。 i-1 等于 -1。 a[-1] 找到“a”的最后一项,因此 10+35 是 45。

          要修复,使用 range(1,len(a)) 如图忽略第一项:

          a=[10,15,20]
          for i in range(1, len(a)):
              a[i]=b[i-1]+a[i]
          

          这会产生另一个问题 - a 的第二个值现在是 25,而不是 15。因此最后一个输出是 45,而不是预期的 35。

          要解决此问题,请创建“a”的副本

          a=[10,15,20]
          b=[10,15,20]
          for i in range(1, len(a)):
              a[i]=b[i-1]+a[i]
          

          因此,如果你要输出 a,你会得到

          [10,25,35]
          

          根据需要。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-02-01
            • 1970-01-01
            相关资源
            最近更新 更多