【问题标题】:How to sum every element in a list with the previous one?如何将列表中的每个元素与前一个元素相加?
【发布时间】:2021-09-11 05:27:18
【问题描述】:

我想收到以下结果,

例子:

list1 = [145, 100, 125, 134, 556]

输出是一个新列表,总和结果如下:

list2 = [145, 245, 225, 259, 690]

【问题讨论】:

  • Stackoverflow 不是免费的编码服务。您应该发送honest attempt at the solution,然后然后在必要时询问有关它的具体问题。

标签: python


【解决方案1】:

您也可以使用zip trick:

>>> list(map(sum, zip(list1, [0]+list1)))
[145, 245, 225, 259, 690]

【讨论】:

    【解决方案2】:

    如果您不介意有点深奥,可以在一个单一的理解中完成,而无需复制原始列表:

    In [14]: list_1 = [145, 100, 125, 134, 556]
        ...: b = 0
        ...: list_2 = [b + (b := a) for a in list_1]
        ...: list_2
    Out[14]: [145, 245, 225, 259, 690]
    

    【讨论】:

      【解决方案3】:

      这类似于Selcuk's answer,但可能更简单一些:

      list2 = [a + b for a, b in zip(list1, [0]+list1)]
      

      或者如果你不想使用zip;

      list2 = [
          list1[i] + (list1[i-1] if i > 0 else 0)
          for i in range(len(list1))
      ]
      

      【讨论】:

        【解决方案4】:

        我建议对此使用列表推导。

        list1 = [145,100,125,134,556]
        newLst = [list1[0]]+[sum([list1[i],list1[i-1]]) for i in range(1,len(list1))]
        

        输出

        [145, 245, 225, 259, 690]
        

        【讨论】:

          【解决方案5】:

          我的两分钱

          list1 = [145,100,125,134,556]
          list2 = [val if not idx else val + list1[idx - 1] for idx, val in enumerate(list1)]
          

          【讨论】:

            【解决方案6】:

            我没有提出列表理解的想法。

            但如果你想要蛮力,那就是:

            list1 = [145, 100, 125, 134, 556]
            list2 = [list1[0]]
            for i in range(1, len(list1)):
                list2.append(list1[i] + list1[i-1])
            
            print(list2)
            

            你可以得到

            [145, 245, 225, 259, 690]
            

            【讨论】:

              【解决方案7】:

              Python 的老派风格!。我创建了这个函数,它接受一个列表作为参数,并返回一个新列表,其中包含前一个元素的总和。希望能帮到你

              def sum_list(list_numbers):
                index = 0
                list2 = [list_numbers[index]]
                while index < (len(list_numbers) - 1):
                  item = list_numbers[index] + list_numbers[index + 1]
                  list2.append(item)
                  index += 1
                return list2
              
              print(sum_list(list1))
              

              输出:

              [145, 245, 225, 259, 690]
              

              编辑:我想用递归方法挑战自己。也许这不是最好的方法,但在这里:

              list2 = []
              def sum_list_recursion(first_element, list_numbers, max_length):
              
                if len(list_numbers) == 0:
                  return list2
              
                elif len(list_numbers) == max_length:
                  list2.append(first_element)
                  next_element = list_numbers[0]
                  list_numbers = list_numbers[1:]
              
                else:
                  next_element = list_numbers[0]
                  list_numbers = list_numbers[1:]
                  list2.append((first_element + next_element))
                
                sum_list_recursion(next_element, list_numbers, max_length)
              
              sum_list_recursion(list1[0], list1, len(list1))
              print(list2)
              

              输出:

              [145, 245, 225, 259, 690]
              

              【讨论】:

                猜你喜欢
                • 2023-03-19
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-03-05
                • 1970-01-01
                • 2023-03-14
                • 1970-01-01
                相关资源
                最近更新 更多