连续数字列出每个数字重复的位置

时间:2016-08-08 20:40:54

标签: python list python-2.7

如何创建连续数字列表,其中每个数字重复N次,例如:

list = [0,0,0,1,1,1,2,2,2,3,3,3,4,4,4,5,5,5]

4 个答案:

答案 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]