Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在列表中合并值_Python_List - Fatal编程技术网

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]