wmatt
wmatt

Reputation: 795

Consecutive numbers list where each number repeats

How can I create a list of consecutive numbers where each number repeats N times, for example:

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

Upvotes: 3

Views: 1201

Answers (4)

Remy J
Remy J

Reputation: 729

The following piece of code is the simplest version I can think of. It’s a bit dirty and long, but it gets the job done.

In my opinion, it’s easier to comprehend.

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.

If you run the code …:

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

Another version a little neater, with list comprehension. But uhmmm… We have to sort it though.

def mklist2(s, n):            
    return sorted([l  for l in range(s) * n])

Running that version will give the following results.

print mklist2(5, 3)

Raw : [0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4]

Sorted: [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]

Upvotes: 0

wilkesybear
wilkesybear

Reputation: 528

Another idea, without any need for other packages or sums:

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

Where N is your number of repeats and M is the maximum value to repeat. E.g.

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

yields

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

Upvotes: 4

mr nick
mr nick

Reputation: 560

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

Upvotes: 0

wilkesybear
wilkesybear

Reputation: 528

My first instinct is to get some functional help from the funcy package. If N is the number of times to repeat each value, and M is the maximum value to repeat, then you can do

import funcy as fp

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

This will return a generator, so to get the array you can just call list() around it

Upvotes: 2

Related Questions