我有一个列表,我必须合并这样的值:
列表:[1, 1, 2, 1, 1, 0]
结果:[2, 2, 2, 0, 0, 0]
它从左向右合并,每次只合并2个相同的数字。
- 前两个值相加(1 + 1)
- 2向左移动
- 其他两个值也加起来(1 + 1)并移位
- 列表从右边用零填充,所以列表的长度保持不变
- (编辑)列表中的任何零都将在最后,而不是在中间
我对Python很陌生,并且不清楚如何处理这个问题。任何帮助表示赞赏。
答案 0 :(得分:2)
简单明了的事情:
def merge_pairs(a):
out = []
i = 0
while i < len(a):
if i < len(a) - 1 and a[i] == a[i + 1]:
out.append(a[i] + a[i + 1])
i += 2
else:
out.append(a[i])
i += 1
out += [0] * (len(a) - len(out))
return out
不是100%确定这是你所需要的,但也许它可以是一个开始。
您提供的单项测试似乎有效:
>>> merge_pairs([1, 1, 2, 1, 1, 0])
[2, 2, 2, 0, 0, 0]