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

2024-10-01 15:48:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Python实现Hierholzers算法,在有向图中找到一个欧拉循环。你可以在这里找到算法的一个例子,Hierholzers Algorithm。在

在这个例子中,我刚刚完成了第五个阶段,换句话说,我的算法生成了一个级别列表,其中每个级别代表图中的一个巡更。
list_of_levels = [[0, 3, 2, 1, 0], [2, 6, 5, 4, 2], [6, 8, 7, 9, 6]]

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

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

所以问题是如何统一这些级别,而不保留括号,也不以其他级别的重复项(顶点)结尾。在

我在考虑手动删除插入下一个级别的顶点,在我完成所有级别后,将最终列表变平,尽管由于某些原因我无法使链从iterable工作。在

即使我设法实现了这个解决方案,我相信还有更好的选择。
我很乐意看到一些想法。在


Tags: of方法算法列表步骤级别阶段algorithm
3条回答

要组合列表,可以使用somthing

>>> 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]

可以按以下方式将元素列表插入到列表中:

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

印刷品

^{pr2}$

注意,这个操作既删除了原来的6,又插入了新元素来代替6。在

此方法在documentation中描述为:

s[i:j] = t
slice of s from i to j is replaced by the contents of the iterable t

只需切片和连接列表:

>>> 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]

相关问题 更多 >

    热门问题