我想将列表中的最后一个元素和第一个元素相加,然后弹出最后一个元素并将该值设置为第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()
在分配区块之后,它会给出更奇怪的结果。
答案 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]