You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将列表扩展至指定长度,按顺序重复元素而非重复整个列表?

问题描述

我想把列表的元素按顺序重复,最终得到长度为x的列表,但现在用my_list * x只会把整个列表重复x次。比如列表[3, 5, 1, 9, 8],当x=12时,期望生成[3, 5, 1, 9, 8, 3, 5, 1, 9, 8, 3, 5],但执行以下代码得到的是重复整个列表12次的结果:

my_list = [3, 5, 1, 9, 8]
x = 12

print(my_list * 12)

输出结果:

[3, 5, 1, 9, 8, 3, 5, 1, 9, 8, 3, 5, 1, 9, 8, 3, 5, 1, 9, 8, 3, 5, 1, 9, 8, 3, 5, 1, 9, 8, 3, 5, 1, 9, 8, 3, 5, 1, 9, 8, 3, 5, 1, 9, 8, 3, 5, 1, 9, 8, 3, 5, 1, 9, 8, 3, 5, 1, 9, 8]
解决方案

下面是几种实现目标的方法:

方法一:列表推导式 + 取模运算

利用列表长度取模,循环获取元素直到达到目标长度:

my_list = [3, 5, 1, 9, 8]
x = 12

result = [my_list[i % len(my_list)] for i in range(x)]
print(result)

输出:

[3, 5, 1, 9, 8, 3, 5, 1, 9, 8, 3, 5]

方法二:重复列表后切片

先计算需要重复多少次整个列表(向上取整),然后截取前x个元素:

my_list = [3, 5, 1, 9, 8]
x = 12

repeat_times = (x + len(my_list) - 1) // len(my_list)  # 向上取整计算重复次数
result = (my_list * repeat_times)[:x]
print(result)

输出和上面一致。

方法三:使用itertools.cycle

itertools.cycle可以无限循环迭代列表元素,再用islice截取前x个:

from itertools import cycle, islice

my_list = [3, 5, 1, 9, 8]
x = 12

result = list(islice(cycle(my_list), x))
print(result)

这种方法适合处理较大的列表,内存效率更高。

内容的提问来源于stack exchange,提问作者RCSBstack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 18:50:33