将列表插入另一个列表,不带括号,并替换该索引中的当前项

时间:2013-12-15 21:40:37

标签: python algorithm graph

我正在尝试在Python中实现Hierholzers算法,以在有向图中找到欧拉循环。您可以在此处找到算法示例Hierholzers Algorithm

就示例而言,我刚刚完成了第五阶段,换句话说,我的算法生成了一个级别列表,其中每个级别代表图形中的一个游览。
list_of_levels = [[0, 3, 2, 1, 0], [2, 6, 5, 4, 2], [6, 8, 7, 9, 6]]

要完成此过程,我需要将这些列表组合在一起,方法是将每个级别插入其上一级的适当位置。例如,上面列表的步骤是,
第1步list_of_levels = [[0, 3, 2, 1, 0], [2, 6, 8, 7, 9, 6, 5, 4, 2]]
第2步list_of_levels = [[0, 3, 2, 6, 8, 7, 9, 6, 5, 4, 2, 1, 0]]

到目前为止,我已经尝试了Python的insert(index,obj)方法,但结果包含插入列表的括号,并且它也没有用插入的项替换索引位置中的项。对于步骤1,插入方法的相应结果如下所示 [2, [6, 8, 7, 9, 6], 6, 5, 4, 2]

所以问题是如何在不保留括号的情况下统一这些级别,而不会从其他级别结束重复项目(顶点)。

我正在考虑手动删除顶点,无论我插入下一个级别,在我完成所有级别之后,平坦最终列表,尽管由于某种原因我无法使链从迭代工作。

即使我设法实施此解决方案,我也相信有更好的选择 我很高兴看到一些想法。

3 个答案:

答案 0 :(得分:6)

您可以通过以下方式将元素列表插入到列表中:

B = [2, 6, 5, 4, 2]
C = [6, 8, 7, 9, 6]
B[1:2] = C
print B

打印

[2, 6, 8, 7, 9, 6, 5, 4, 2]

请注意,此操作已删除原始6并插入新元素代替6。

此方法在documentation中描述为:

  

s [i:j] = t
  从i到j的切片被替换为。的内容   可迭代的

答案 1 :(得分:1)

只需切片并连接列表:

>>> l = [2, 6, 5, 4, 2]
>>> x = [6, 8, 7, 9, 6]
>>> l = l[:1] + x + l[2:]
[2, 6, 8, 7, 9, 6, 5, 4, 2]

答案 2 :(得分:0)

要合并列表,您可以使用

中的内容
>>> lol = [[0, 3, 2, 1, 0], [2, 6, 5, 4, 2], [6, 8, 7, 9, 6]]
>>> trans = {x[0]: x for x in lol[1:]}
>>> combined= lol[0]
>>> while trans:
...     combined = [x for y in comb for x in trans.pop(y, [y])]
...
>>> combined
[0, 3, 2, 6, 8, 7, 9, 6, 5, 4, 2, 1, 0]