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

问题描述 投票:0回答:5

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

list = [0,0,0,1,1,1,2,2,2,3,3,3,4,4,4,5,5,5]
python list python-2.7
5个回答
4
投票

另一个想法,无需任何其他套餐或金额:

[x//N for x in range((M+1)*N)]

其中

N
是重复次数,
M
是重复的最大值。例如

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]

2
投票

我的第一直觉是从 funcy 包中获得一些功能帮助。如果

N
是重复每个值的次数,而
M
是重复的最大值,那么你可以这样做

import funcy as fp

fp.flatten(fp.repeat(i, N) for i in range(M + 1))

这将返回一个生成器,因此要获取数组,您只需调用

list()
即可


0
投票

sum([[i]*n for i in range(0,x)], [])


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, 6, 7, 7, 8, 8, 9, 9]

print mklist(5, 3)

[0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 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, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]


-3
投票

emaildatabaseusa.com 推广您的电话营销和短信营销。您可以以便宜的价格购买我们的德国手机号码列表。您可以购买目标组织和个人的数据库。我们将为您提供免费的实验营销样本数据库。我们有来自世界不同国家的移动列表。

© www.soinside.com 2019 - 2024. All rights reserved.