【发布时间】:2017-08-28 16:58:18
【问题描述】:
给定一个数字列表,如下所示:
lst = [0, 10, 15, 17]
我想要一个列表,其中包含来自i -> i + 3 的所有i 中的lst 的元素。如果有重叠的范围,我希望它们合并。
所以,对于上面的例子,我们首先得到:
[0, 1, 2, 3, 10, 11, 12, 13, 15, 16, 17, 18, 17, 18, 19, 20]
但对于最后 2 组,范围重叠,因此在合并它们时,您有:
[0, 1, 2, 3, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20]
这是我想要的输出。
这是我想到的:
from collections import OrderedDict
res = list(OrderedDict.fromkeys([y for x in lst for y in range(x, x + 4)]).keys())
print(res) = [0, 1, 2, 3, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20]
但是,这很慢 (10000 loops, best of 3: 56 µs per loop)。如果可能的话,我想要一个 numpy 解决方案,或者比这更快的 python 解决方案。
【问题讨论】:
-
原始元素是否保证排序?
-
@Ev.Kounis 是的。保证。
-
@Coldspeed 然后你可以使用它。投射到
set,然后再次投射到sorting,如果它让它更快的话。 -
@ChristianDean 哦,对不起,我在 python2 上运行这个。
-
@cᴏʟᴅsᴘᴇᴇᴅ 啊,那我错了。我没有意识到版本之间存在差异。我很少使用 Python 2。