如何创建连续数字列表,其中每个数字重复N次,例如:
list = [0,0,0,1,1,1,2,2,2,3,3,3,4,4,4,5,5,5]
答案 0 :(得分:4)
另一个想法,不需要其他包或总和:
[x//N for x in range((M+1)*N)]
其中N
是您的重复次数,M
是重复的最大值。 E.g。
N = 3
M = 5
[x//N for x in range((M+1)*N)]
产量
[0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5]
答案 1 :(得分:2)
我的第一直觉是从funcy包中获得一些功能性帮助。如果N
是重复每个值的次数,而M
是要重复的最大值,则可以执行
import funcy as fp
fp.flatten(fp.repeat(i, N) for i in range(M + 1))
这将返回一个生成器,因此要获取数组,您只需在其周围调用list()
答案 2 :(得分:0)
sum([[i]*n for i in range(0,x)], [])
答案 3 :(得分:0)
以下代码是我能想到的最简单的版本。 这有点肮脏而且很长,但它完成了工作。
在我看来,理解起来比较容易。
def mklist(s, n):
l = [] # An empty list that will contain the list of elements
# and their duplicates.
for i in range(s): # We iterate from 0 to s
for j in range(n): # and appending each element (i) to l n times.
l.append(i)
return l # Finally we return the list.
如果您运行代码......:
print mklist(10, 2)
[0,0,1,1,2,2,3,3,4,4,5,5,6,7,7,8,8,9,9]
print mklist(5, 3)
[0,0,0,1,1,1,2,2,3,3,3,4,4,4,4
另一个版本有点整洁,列表理解。 但是嗯...我们不得不对它进行排序。
def mklist2(s, n):
return sorted([l for l in range(s) * n])
运行该版本将得到以下结果。
print mklist2(5, 3)
原始:[0,1,2,3,4,0,1,2,3,4,0,1,2,3,4]
排序:[0,0,0,1,1,2,2,2,3,3,3,4,4,4]