Python 在列表中合并值
我有一个列表,其中我必须合并如下值: 列表:Python 在列表中合并值,python,list,Python,List,我有一个列表,其中我必须合并如下值: 列表:[1,1,2,1,1,0] 结果:[2,2,2,0,0,0] 它从左到右合并,每次只合并2个相同的数字 前两个值相加(1+1) 2号变速器向左移动 另外两个值也相加(1+1)并移位 列表从右侧填充为零,因此列表的长度保持不变 (编辑)列表中的任何零都将位于末尾,而不是中间 我对Python非常陌生,对于如何实现这一点没有明确的想法。非常感谢您的帮助。简单明了的建议如何: def merge_pairs(a): out = [] i
[1,1,2,1,1,0]
结果:[2,2,2,0,0,0]
它从左到右合并,每次只合并2个相同的数字
- 前两个值相加(1+1)
- 2号变速器向左移动
- 另外两个值也相加(1+1)并移位
- 列表从右侧填充为零,因此列表的长度保持不变
- (编辑)列表中的任何零都将位于末尾,而不是中间
我对Python非常陌生,对于如何实现这一点没有明确的想法。非常感谢您的帮助。简单明了的建议如何:
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
您错过了一个边缘案例,其中,
a[-1]
未合并且不是0。@user2357112发现得很好。现在怎么样?:)现在已经修好了。我们可能还需要考虑<代码> 0 s应该如何影响合并,但是还不清楚如何做到这一点。我们将知道OP是否澄清了它。@user2357112 True,规范不是很清楚。也不清楚是否允许同一号码合并多次;我忽略了这一点谢谢!中间不会有任何零,这就足够了。像<代码>(1, 0, 1,0)< /代码>这样的输入应该发生什么?你在写2048克隆人吗?如果是这样,你已经很好地描述了你想做什么,但是你的描述仍然需要更精确。谢谢,我已经设法把所有的零点在中间移到右边。所以中间不会有零。至于2048克隆人,你是对的:)认为这可能是一个很好的做法
>>> merge_pairs([1, 1, 2, 1, 1, 0])
[2, 2, 2, 0, 0, 0]