2015-10-09 2 views
-2

Я хочу дублировать список n раз, сохраняя при этом порядок самого списка. Например, все, что у меня есть сейчас, и оно не работает, и оно не дает мне ошибку.Дублирование списка N раз

def duplicate(testList, n): 
    y = 0 
    x = len(testList) 
    newList=[] 
    while y < x: 
     for z in range (0, n): 
      newList.append(testList[y]) 
     y = y + 1 
    return newList 

duplicate([1,2,3], 3) 

После этого им не известно, где его исправить.

+0

Что является искомым поведение? Каково наблюдаемое поведение? Как они отличаются друг от друга? – inspectorG4dget

+0

Когда вы говорите, что поддерживаете заказ. Вы имеете в виду, что если бы у вас было [3, 1, 2], вы хотите, чтобы он был [1, 2, 3] в качестве вывода? – idjaw

+1

, запускающий этот код локально, дает мне '[1, 1, 1, 2, 2, 2, 3, 3, 3]', который, кажется, является ожидаемым результатом, нет? – Mureinik

ответ

1

Как об этом

>>> def duplicate(testList, n): 
...  return testList*n 
... 
>>> x=[1,2,3] 
>>> duplicate(x,3) 
[1, 2, 3, 1, 2, 3, 1, 2, 3] 

testList * создаст новый список, состоящий из testList п число раз п, это эквивалентно (testList + testList + ....) п раз

ИЛИ

>>> def duplicate(testList, n): 
...  return [ele for ele in testList for _ in range(n)] 
... 
>>> duplicate([1,2,3],2) 
[1, 1, 2, 2, 3, 3] 
>>> duplicate([1,2,3],3) 
[1, 1, 1, 2, 2, 2, 3, 3, 3] 

Это возвращает список, где каждый элемент повторяется п раз в списке, однако остерегайтесь этого

>>> duplicate([[1,2,3]],3) 
[[1, 2, 3], [1, 2, 3], [1, 2, 3]] 
+0

Хотя этот ответ может быть правильным, добавьте некоторое объяснение. Отказ от основной логики более важен, чем просто предоставление кода, поскольку он помогает ОР и другим читателям исправить эту и подобные проблемы сами. – CodeMouse92

0

Вы должны фактически переключить цикл for и цикл while и не забудьте инициализировать y каждый раз, когда вы выполняете цикл. Сравните переменную y в своем коде и моем, и вы увидите, что на самом деле хотите, чтобы он пошел 0,1,2,0,1,2 .. так, чтобы он обходил вокруг и добавлял правильный индекс.

def duplicate(testList, n): 
    x = len(testList) 
    newList=[] 
    for z in range (0, n): 
     y = 0 
     while y < x: 
      newList.append(testList[y]) 
      y = y + 1 
    return newList 

print duplicate([1,2,3], 3) 
1

Если вы хотите [1, 2, 3, 1, 2, 3, 1, 2, 3], и вы должны использовать циклы, использовать цикл диапазон и удлиняет:

def duplicate(testList, n): 
    new_list = [] 
    for i in range(n): 
     new_list.extend(testList) 
    return new_list 

Чтобы получить тот же результат, как свой собственный код, диапазон и расширение будет работать:

def duplicate(testList, n): 
    x = len(testList) 
    new_list = [] 
    for j in range(x): 
     new_list.extend(testList[j] for _ in range(n)) 
    return new_list 


print(duplicate([1, 2, 3], 3)) 

Который может просто стать list comprehension:

def duplicate(testList, n): 
    return [ele for ele in testList for _ in range(n)] 

Если вы не видите вывод для какого-либо кода, то, скорее всего, вы работаете с идеей и не печатаете функцию return i.e print(duplicate([1, 2, 3], 3)).

Наконец, если вы индексировать и использовать две петли и использовать присоединять как свой собственный код, вы должны использовать 2 петли диапазона, нет необходимости в цикле в то время как у всех:

def duplicate(testList, n): 
    x = len(testList) 
    new_list = [] 
    for j in range(x): 
     for _ in range(n): 
      new_list.append(testList[j]) 
    return new_list 
+0

Нет, что я хочу [1,1,1,2,2,2,3,3,3] Но я получаю пустой результат, когда я использую введенный код –

+0

@FrankValdez работает с печатью, и я уверен, вы увидите output –

+0

Я бежал с принтом newList, и он дал ошибку «name newList не определен» –

Смежные вопросы