以相同的顺序重复列表的元素

Repeat a list's elements in the same order

我有一个列表,我想以相同的顺序重复它的元素。

我想使用 sl 创建 bg

# small list
sl = [10,20]
# from small list, create a big list
bg = [10,10,20,20]

我试过:

bg = [[i,j] in for i,j in zip([[sl[0]]*2,[sl[1]]*2])]

但这给了我:

 bg = [[10,20],[10,20]]

如何获得所需的输出?

import numpy as np
s1 = [10,20]
s2 = np.array(s1).repeat(2)
print(list(s2)) # [10, 10, 20, 20]

我忍不住在这样的操作中使用numpy的冲动。使用此功能,您不仅可以对一维情况进行重复,还可以对矩阵或更高阶张量进行重复。

l1 = [10,20]
l2 = l1
l1.extend(l2)

输出:

value of l1:
[10,20,10,20]

这是一种使用 itertools 的方法:

from itertools import repeat, chain
repetitions = 2

list(chain.from_iterable(repeat(item, repetitions) for item in sl))

您也可以使用列表推导式,但需要注意的是,在列表推导式中使用多个 for 子句被视为 poor style by some:

[item for item in sl for _ in range(repetitions)]

这输出:

[10, 10, 20, 20]

您可以使用 itertools.chainzip:

from itertools import chain
out = list(chain.from_iterable(zip(*[sl]*2)))

输出:

[10, 10, 20, 20]

既然你标记了它 pandas,你也可以使用 repeat

out = pd.Series(sl).repeat(2)

输出:

0    10
0    10
1    20
1    20
dtype: int64

一个非常简单的方法可能是:

sl = [10,20]
# from small list, create a big list
bg = []
for ele in sl:
    bg.append(ele)
    bg.append(ele)
print(bg)

为了使其更通用并包含更多重复,您可以这样做:

def append_lst(lst, val):
    lst.append(val)

sl = [10,20]
# from small list, create a big list
bg = []
noOfRep = 2
for ele in sl:
    for _ in range(noOfRep):
        append_lst(bg, ele)
    
print(bg)

输出:

[10, 10, 20, 20]