如何在由前一个元素的连续值和第二项中的零组成的列表中添加连续元素?

Posted

技术标签:

【中文标题】如何在由前一个元素的连续值和第二项中的零组成的列表中添加连续元素?【英文标题】:How can i add consecutives elements in a list composed of the consecutive value of the previous element and a zero in the second term? 【发布时间】:2022-01-12 13:44:34 【问题描述】:

我想通过添加前一个元素的连续值(第一项)和第二项中的零来创建一个新列表,该列表采用我现有的列表 L > 整个列表。

输入:

L = [(1, 12), (3, 14), (6, 19), ..., (7412, 15), (7415, 15)]

我想要这个输出:

L = [(1, 12), (2, 0) ,(3, 14), (4, 0), (5, 0), (6, 19), ... , (7412, 15), (7413, 0), (7414, 0), (7415, 15)]

【问题讨论】:

所以只在遍历列表时插入零?继续做吧。我们不会为您编写代码,而是发布您所做的事情,也许我们可以发现错误。我可能会编写一个返回全新列表的函数。 【参考方案1】:

这应该可以完成工作。不过,这不是最易读的。

L = [(1, 12), (3, 14), (6, 19)]
keys = key[0]:idx for (idx, key) in enumerate(L)
[(x, L[keys[x]][1]) if x in keys.keys() else (x, 0) for x in range(1, L[-1][0] + 1)]

输出:

[(1, 12), (2, 0), (3, 14), (4, 0), (5, 0), (6, 19)]

可以使用简单的 for 循环代替列表理解,使其更具可读性,但也会占用更多代码行。

【讨论】:

非常感谢!【参考方案2】:

你可以

(i) 使用set.difference 查找在L 中没有引导任何元组的数字,并为每个元组创建一个元组并将所有数字放入一个列表中,

(ii) 将其添加到原始 L 并根据第一个元素对新列表进行排序。

L = [(1, 12), (3, 14), (6, 19)]
z = list(zip(*L))[0]
out = [(i,0) for i in set(range(z[0],z[-1]+1)).difference(z)]
out = sorted(L + out)

输出:

[(1, 12), (2, 0), (3, 14), (4, 0), (5, 0), (6, 19)]

【讨论】:

以上是关于如何在由前一个元素的连续值和第二项中的零组成的列表中添加连续元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何在TinyMCE的列表项中添加段落?

markdown列表

如何比较数字子列表中的第一项,如果重复,比较第二项并选择第二项最小的子列表?

splice()和slice()方法的区别

Markdown快速学习效果展示页

如何在 RecyclerView 的一项中找到两个文本块?