从现有列表中创建一个包含 N 个数字的列表,每个数字重复 K 次
Creating a list of N numbers from existing list each repeated K times
我相信这是一个很容易解决的问题。我已经搜索并找到了一些类似的答案,但不是我想要实现的有效方法。
假设列表如下:
x = [6, 7, 8]
我想通过将每个数字重复 k 次来创建一个新列表。假设k=3,结果应该是:
xr = [6, 6, 6, 7, 7, 7, 8, 8, 8]
我能够使用嵌套循环来完成此操作,但我认为这是非常低效的:
xr = []
for num in x: # for each number in the list
for t in range(3): # repeat 3 times
xx2.append(num)
我也试过:
[list(itertools.repeat(x[i], 3)) for i in range(len(x))]
但我得到:
[[6, 6, 6], [7, 7, 7], [8, 8, 8]]
是否有更有效的直接方法来完成此操作?
您可以使用列表理解:
x = [6, 7, 8]
k = 3
out = [v for v in x for _ in range(k)]
print(out)
打印:
[6, 6, 6, 7, 7, 7, 8, 8, 8]
def repeat_k(l,k):
lo = []
for x in l:
for i in range(k):
lo.append(x)
return lo
print (repeat_k([1,2,3],5))
输出:
[1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3]
有列表理解:
def repeat_k(l,k):
return [ x for x in l for i in range(k) ]
print (repeat_k([1,2,3],5))
输出:
[1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3]
另一种可能性:
>>> x = [6, 7, 8]
>>> k = 3
>>> l = []
>>> for item in x:
... l += k * [item]
...
>>> l
[6, 6, 6, 7, 7, 7, 8, 8, 8]
您可以创建一个方便的函数:
def repeat(it, n):
for elem in it: yield from [elem] * n
像这样使用它:
>>> list(repeat(x, n=3))
[6, 6, 6, 7, 7, 7, 8, 8, 8]
谢谢大家的解答
似乎有一种更简单、更直接的方法可以使用 Numpy 来解决这个问题。
np.repeat(x, 3).tolist()
打印出我所需要的:
[6, 6, 6, 7, 7, 7, 8, 8, 8]
import itertools
x=[4,5,6]
k=3
res = list(itertools.chain.from_iterable(itertools.repeat(i, K) for i in test_list))
print (res)
也可以使用python itertools 库的内置函数来解决。 repeat 函数执行重复任务,分组到列表中由 from_iterable 函数完成。
我相信这是一个很容易解决的问题。我已经搜索并找到了一些类似的答案,但不是我想要实现的有效方法。
假设列表如下:
x = [6, 7, 8]
我想通过将每个数字重复 k 次来创建一个新列表。假设k=3,结果应该是:
xr = [6, 6, 6, 7, 7, 7, 8, 8, 8]
我能够使用嵌套循环来完成此操作,但我认为这是非常低效的:
xr = []
for num in x: # for each number in the list
for t in range(3): # repeat 3 times
xx2.append(num)
我也试过:
[list(itertools.repeat(x[i], 3)) for i in range(len(x))]
但我得到:
[[6, 6, 6], [7, 7, 7], [8, 8, 8]]
是否有更有效的直接方法来完成此操作?
您可以使用列表理解:
x = [6, 7, 8]
k = 3
out = [v for v in x for _ in range(k)]
print(out)
打印:
[6, 6, 6, 7, 7, 7, 8, 8, 8]
def repeat_k(l,k):
lo = []
for x in l:
for i in range(k):
lo.append(x)
return lo
print (repeat_k([1,2,3],5))
输出:
[1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3]
有列表理解:
def repeat_k(l,k):
return [ x for x in l for i in range(k) ]
print (repeat_k([1,2,3],5))
输出:
[1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3]
另一种可能性:
>>> x = [6, 7, 8]
>>> k = 3
>>> l = []
>>> for item in x:
... l += k * [item]
...
>>> l
[6, 6, 6, 7, 7, 7, 8, 8, 8]
您可以创建一个方便的函数:
def repeat(it, n):
for elem in it: yield from [elem] * n
像这样使用它:
>>> list(repeat(x, n=3))
[6, 6, 6, 7, 7, 7, 8, 8, 8]
谢谢大家的解答
似乎有一种更简单、更直接的方法可以使用 Numpy 来解决这个问题。
np.repeat(x, 3).tolist()
打印出我所需要的:
[6, 6, 6, 7, 7, 7, 8, 8, 8]
import itertools
x=[4,5,6]
k=3
res = list(itertools.chain.from_iterable(itertools.repeat(i, K) for i in test_list))
print (res)
也可以使用python itertools 库的内置函数来解决。 repeat 函数执行重复任务,分组到列表中由 from_iterable 函数完成。