以相同的顺序重复列表的元素
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.chain
和 zip
:
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]
我有一个列表,我想以相同的顺序重复它的元素。
我想使用 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.chain
和 zip
:
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]