python汇总列表中的元素:第一个+最后一个,从最后到第一个

时间:2018-03-16 22:14:00

标签: python list

我想将列表中的最后一个元素和第一个元素相加,然后弹出最后一个元素并将该值设置为第2个,第3个,第4个到最后一个元素到第n个 - 1个大小。看起来像这样:

[1,1,1,1]
[1,1,2]
[1,3]
[4]

这是在找到一个数字的所有可能总和的上下文中。在前面的例子中,他们总和为4.到目前为止我所拥有的是:

d = [1,1,1,1,1,1,1,1,1,1]
for x in range(1, len(d)+1):
    d[-x] = (sum(d[:1]) + d[-x])

给我这个:

[1, 1, 1, 1, 1, 1, 1, 1, 1, 2]
[1, 1, 1, 1, 1, 1, 1, 1, 2, 2]
[1, 1, 1, 1, 1, 1, 1, 2, 2, 2]
[1, 1, 1, 1, 1, 1, 2, 2, 2, 2]
[1, 1, 1, 1, 1, 2, 2, 2, 2, 2]
[1, 1, 1, 1, 2, 2, 2, 2, 2, 2]
[1, 1, 1, 2, 2, 2, 2, 2, 2, 2]
[1, 1, 2, 2, 2, 2, 2, 2, 2, 2]
[1, 2, 2, 2, 2, 2, 2, 2, 2, 2]
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2]

P.S。当我尝试

d.pop()

在分配区块之后,它会给出更奇怪的结果。

1 个答案:

答案 0 :(得分:3)

您的代码应该删除两个现有元素并在列表中添加一个新元素。或者至少删除第一个元素。我没有看到你删除任何东西......只是重新分配。

选项1
您可以使用pop + append

非常简洁地完成此操作
while len(d) > 1:
     d.append(d.pop() + d.pop(0))
     print(d)

[1, 1, 2]
[1, 3]
[4]

选项2
或者,使用单个pop操作。这应该非常有效。

while len(d) > 1:
     d[-1] += d.pop(0)
     print(d)

[1, 1, 2]
[1, 3]
[4]