gpt4 book ai didi

python - 根据条件在嵌套列表中插入缺失的元素 - Python

转载 作者:太空宇宙 更新时间:2023-11-04 01:22:10 25 4
gpt4 key购买 nike

我有嵌套列表,

a = [(2,0),(3,0),(4,2),(10,3),(11,5)]

我想做的是在位置n处添加内元组(0,n),其中n是location a 中缺失的元素。每个内部列表中的第二个元素应该以 1 为增量递增,如果存在间隙,则应在该间隙处插入 (0,n)

因此列表 a 的预期结果是:

a_out = [(2,0),(3,0),(0,1),(4,2),(10,3),(0,4),(11,5)]

即因为 a 中的第一个和第二个元素是 (3,0)(4,2) 所以 a (0,1) 插入在它们之间。

我的解决方案有效,但我想知道是否有更 Pythonic 的方式来解决这个问题?我一直在查找 Python 的 itertools库,但我找不到简洁的解决方案。

到目前为止我的代码是:

l1 = [n[1] for n in a]
l2 = range(max(l1)+1)
l3 = [n for n in l2 if not in l1]


zeros = [0]*len(l3)
inserts = zip(zeros,l3)
a_full = a + inserts

a_out = sorted(a_full, key = itemgetter(1))

谁能提出更好的解决方案??

编辑:

通常,可能有许多元素具有相同的第二个内部元素(例如 (2,0)(3,0) 出现在 中一个)。但是,我可以将它们分组并总结在一起而不失一般性。

嵌套列表 a 可以表示为,

a_sum = [(5,0),(4,2),(10,3),(11,5)]

通过使用代码,

a_group = [sum([x for x, y in group]) for key, group in groupby(a, key=itemgetter(1))]

a_sum = zip(output,list(set(l1)))

编辑二:

a 的长度始终为 600,但根据研究的进展情况,这可能会增加到 10**3 数量级。

最佳答案

您可以在复杂度为 O(n) 的嵌套列表理解中执行此操作。只需在嵌套部分添加任何缺失的条目。

>>> a = [(2,0),(3,0),(4,2),(10,3),(11,5)]
>>> [k for i,j in enumerate(a, 1) for k in [j] + [(0,n) for n in range(j[1]+1, a[min(i, len(a)-1)][1])]]
[(2, 0), (3, 0), (0, 1), (4, 2), (10, 3), (0, 4), (11, 5)]

>>> [k for i,j in zip(a, a[1:]) for k in [i] + [(0,n) for n in range(i[1]+1, j[1])]] + a[-1:]
[(2, 0), (3, 0), (0, 1), (4, 2), (10, 3), (0, 4), (11, 5)]

如果 a 很大,您可以通过在其上使用额外的迭代器来避免 a[1:] 切片

>>> a_iter = iter(a); next(a_iter)
(2, 0)
>>> [k for i,j in zip(a, a_iter) for k in [i] + [(0,n) for n in range(i[1]+1, j[1])]] + a[-1:]
[(2, 0), (3, 0), (0, 1), (4, 2), (10, 3), (0, 4), (11, 5)]

关于python - 根据条件在嵌套列表中插入缺失的元素 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20516112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com