gpt4 book ai didi

python - 如何仅使用 itertools 将每个 Python 列表的元素重复 n 次?

转载 作者:太空宇宙 更新时间:2023-11-03 12:20:19 24 4
gpt4 key购买 nike

我有一个数字列表:数字 = [1, 2, 3, 4]

我想要一个列表,其中它们像这样重复 n 次(对于 n = 3):

[1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]

问题是我只想为此使用 itertools,因为我的性能非常受限。

我尝试使用这个表达式:

list(itertools.chain.from_iterable(itertools.repeat(numbers, 3)))

但它给了我这样的结果:

[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]

这显然不是我需要的。

有没有一种方法可以只使用 itertools 来做到这一点,而不使用排序、循环和列表理解?我能得到的最接近的是:

list(itertools.chain.from_iterable([itertools.repeat(i, 3) for i in numbers])),

但它也使用列表理解,我想避免这种情况。

最佳答案

首先,使用 itertools 中的函数不一定比列表理解更快:您应该进行基准测试。

纯列表理解方法:

>>> numbers = [1, 2, 3, 4]
>>> [y for x in numbers for y in (x,)*3]
[1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]

在生成器表达式中使用 chain.from_iterable()repeat():

>>> from itertools import chain, repeat
>>> list(chain.from_iterable(repeat(n, 3) for n in numbers))
[1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]

使用 chain.from_iterable()zip():

>>> from itertools import chain
>>> list(chain.from_iterable(zip(*(numbers,)*3)))
[1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]

关于python - 如何仅使用 itertools 将每个 Python 列表的元素重复 n 次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45799233/

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