Повторяющиеся элементы в понимании списка - PullRequest
14 голосов
/ 13 октября 2010

У меня есть понимание этого списка:

[[x,x] for x in range(3)]

что приводит к этому списку:

[[0, 0], [1, 1], [2, 2]]

но мне нужен этот список:

[0, 0, 1, 1, 2, 2]

Какой самый простой способ создать этот список?

Ответы [ 7 ]

12 голосов
/ 13 октября 2010
[y for x in range(3) for y in [x, x]]
4 голосов
/ 13 октября 2010

общее решение;

m = 3   #the list of integers
n = 2   # of repetitions
[x for x in range(m) for y in range(n)]
4 голосов
/ 13 октября 2010
>>> [i for i in range(3) for _ in range(2)]
[0, 0, 1, 1, 2, 2]
2 голосов
/ 13 октября 2010
>>> [int(x/2) for x in range(6)]
[0, 0, 1, 1, 2, 2]
1 голос
/ 06 апреля 2012

Мое решение:

def explode_list(p,n):
    arr=[]
    track=0

    if n==0:
        return arr    
    while track<len(p): 
        m=1
        while m<=n:
            arr.append(p[track])
            m=m+1
        track=track+1

    return arr
0 голосов
/ 13 октября 2010
[x/2 for x in range(6)]

обновление:

[x//2 for x in range(6)] #ok now ?
0 голосов
/ 13 октября 2010

Вам может сойтись с этим:

[floor(x/2) for x in range(6)]

edit1

[int(x/2) for x in range(6)]

- это более портативное решение в том же духе.Хотя другие представленные ответы кажутся лучше.

...