如何高效将基础列表元素转换为连续元素列表?
高效转换基础列表为连续序列列表
这个需求其实很常见,用Python可以轻松高效地实现,我给你两种实用的解法:
方法一:嵌套列表推导式(简洁高效)
这种方式利用Python的列表推导式特性,底层经过优化,执行速度很快,代码也很简洁:
def expand_continuous_sequence(base_list, count): # 遍历原列表每个元素,生成从x到x+count-1的连续整数 return [num for x in base_list for num in range(x, x + count)] # 测试示例 base = [1, 4, 10] print(expand_continuous_sequence(base, 2)) # 输出: [1, 2, 4, 5, 10, 11] print(expand_continuous_sequence(base, 3)) # 输出: [1, 2, 3, 4, 5, 6, 10, 11, 12]
解释:外层循环遍历原列表的每个元素x,内层循环通过range(x, x+count)生成从x开始的count个连续整数,最后将所有整数收集到一个列表中。
方法二:itertools.chain(内存友好,适合大数据量)
如果你的基础列表非常大,推荐用这种惰性求值的方式,它不会一次性创建所有子列表,而是逐个生成元素,能有效节省内存:
from itertools import chain def expand_continuous_sequence(base_list, count): # 生成器表达式逐个生成子序列,再通过chain拼接 return list(chain.from_iterable(range(x, x + count) for x in base_list)) # 测试示例 base = [1, 4, 10] print(expand_continuous_sequence(base, 2)) # 输出: [1, 2, 4, 5, 10, 11] print(expand_continuous_sequence(base, 3)) # 输出: [1, 2, 3, 4, 5, 6, 10, 11, 12]
解释:range(x, x+count)本身就是惰性的生成器,chain.from_iterable会逐个迭代这些生成器的元素,最后转成列表。这种方式在处理百万级以上的基础列表时,内存占用会比列表推导式小很多。
内容的提问来源于stack exchange,提问作者Lokin
相关产品推荐
相关产品推荐

