Python中如何为数值列表每个元素生成前三个数并合并为有序新列表
实现需求的高效方案
你的需求是对原列表中的每个元素,生成其本身和前面连续3个小于它的整数,最终合并为升序列表,以下是两种最高效的实现方式:
方式1:列表推导式(最简洁,适合绝大多数场景)
你给出的原列表本身已经是升序排列,且每个元素的最小生成值都大于前一个元素的最大生成值,直接拼接生成的范围天然有序,不需要额外排序,时间复杂度为O(n)(n为最终列表长度):
list1 = [15,27,48,70,83] # 对每个x生成range(x-3, x+1),展开后合并为新列表 list1 = [num for x in list1 for num in range(x-3, x+1)]
运行后list1的内容就是你需要的目标结果。
如果你的原列表本身是无序的,可以先排序再生成,性能依然远高于先生成所有元素再排序:
list1 = [num for x in sorted(list1) for num in range(x-3, x+1)]
方式2:itertools拼接(适合处理超大规模的原列表)
如果原列表长度极大,用itertools.chain可以减少内存占用,性能和列表推导式相当:
from itertools import chain list1 = [15,27,48,70,83] list1 = list(chain.from_iterable(range(x-3, x+1) for x in list1))
说明
你目前给出的示例代码只能将原列表的每个元素减1,得到的是[14,26,47,69,82],无法实现生成连续数的需求。
内容的提问来源于stack exchange,提问作者user3234242
相关产品推荐
相关产品推荐

