【问题标题】:How to print the sum of the current and previous element in a list如何打印列表中当前元素和前一个元素的总和
【发布时间】:2020-02-08 00:15:22
【问题描述】:

我正在尝试遍历数字列表并使用 python 打印当前元素和前一个元素的总和。例如,

给定numbers = [5,10,15,20,25,30,30],输出应该是5, 15, 25, 35, 45, 55, 60,。这是我尝试过的以下代码,它非常接近答案,但第一个元素是错误的。

numbers = [5, 10, 15, 20, 25, 30, 30]

i = 0
for x in range(1, 8):
    print(numbers[i] + numbers[i - 1], end=", ")
    i += 1

我得到了输出35, 15, 25, 35, 45, 55, 60,。我做错了什么?

【问题讨论】:

  • 为什么使用x,而不是i
  • 这里最大的问题是您将for loop模式while loop模式 混淆了。在这两个循环之间的战斗中,我支持for :) 。 @Felipe 的回答完美地捕捉到了如何使用 for 循环来做到这一点。

标签: python list


【解决方案1】:

您可以将numbers 的相邻项与自身压缩但用0 填充一个来配对,这样您就可以遍历这些对以在列表推导中输出总和:

[a + b for a, b in zip([0] + numbers, numbers)]

或通过将这些对映射到sum 函数:

list(map(sum, zip([0] + numbers, numbers)))

两者都会返回:

[5, 15, 25, 35, 45, 55, 60]

【讨论】:

    【解决方案2】:

    您从索引0 开始,您的预期输出似乎从索引1 开始:

    这里有一个更好的解决方案:

    numbers = [5, 10, 15, 20, 25, 30, 30]
    
    for i in range(len(numbers)):
        if i == 0:
            print(numbers[i])
        else:
            print(numbers[i - 1] + numbers[i])
    

    输出:

    5
    15
    25
    35
    45
    55
    60
    

    【讨论】:

    • 这是教初学者的绝佳解决方案(通过查看 OP 的代码,可以放心地假设他们是初学者)。而这个解决方案是完美的,因为它用他们自己原创的思维模式来指导 OP。了解这一点后,他们可以继续使用“高级”解决方案,例如@blhsing 的
    【解决方案3】:

    这应该有效:

    numbers = [5, 10, 15, 20, 25, 30, 30]
    
    output = [numbers[i]+numbers[i-1] if i > 0 else numbers[i] for i in range(len(numbers))]
    print(output)
    

    【讨论】:

      【解决方案4】:

      您从i = 0 开始,因此您要添加的第一个数字是0-1(在本例中为最后一个)。这就是您获得35 (5+30) 的原因。

      【讨论】:

        【解决方案5】:

        这个列表理解有效:

        numbers = [5, 10, 15, 20, 25, 30, 30]
        
        output = [value + numbers[i-1] if i else value for i, value in enumerate(numbers)]
        print(output)
        
        >>> [5, 15, 25, 35, 45, 55, 60]
        

        【讨论】:

          【解决方案6】:

          作弊,并在开头添加[0],以防止第一个和错误。 不过最后你会遇到问题,因为enumerate 中的列表比原始列表长一个,所以还要剪掉它的最后一个数字:

          print ([a+numbers[index] for index,a in enumerate([0]+numbers[:-1])])
          

          结果:

          [5, 15, 25, 35, 45, 55, 60]
          

          如果您想看看它是如何工作的,请在添加之前打印原始数字:

          >>> print ([(a,numbers[index]) for index,a in enumerate([0]+numbers[:-1])])
          [(0, 5), (5, 10), (10, 15), (15, 20), (20, 25), (25, 30), (30, 30)]
          

          enumerate 循环遍历 已更改 列表 [0, 5, 15, .. 55],其中所有内容都上移了一个位置,但 numbers[index] 仍然从 原始 返回正确的索引列表。将它们相加会产生正确的结果。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-09-16
            • 1970-01-01
            • 2011-01-09
            • 2010-10-27
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多