2016-04-01 3 views
0

Я немного новичок в python ... Поэтому я некоторое время боролся с проблемой, и после огромных исследований я не нашел решения, поэтому решил задать здесь:).Python - Копирование списков в цикле

Таким образом, код, который объясняет мою проблему:

test = [] 
solutions = [] 

i = 0 
while i < 100: 
    for i in range(0, 64): 
     pos = random.randrange(0, 64) 
     test.append(pos) 
    solutions.append(test) 
    test.clear() 
    i += 1 

Так что я хочу, чтобы добавить копию таблицы в другую каждый цикл идет, а затем очистить таблицу с именем теста. Проблема в том, что я не знаю, как создать копию списка каждый раз, когда идет цикл. Так я получаю список пустых списков :(

Я попытался с copy.copy или copy.deepcopy, но это не сработало.

Это мой первый вопрос здесь так извините за любую «ошибку» также Я не англоговорящий, но я надеюсь, что вы будете в состоянии понять меня.

+0

Не уверен, что вы хотите сделать здесь, но цикл 'while' никогда не кончится. Даже добавить 'i + = 1' будет недостаточно (хотя это необходимо). Вы должны использовать 2 уникальных имени для 'i' в цикле' while' и on в цикле 'for' или использовать' for _ в диапазоне (0, 64) 'например – Zaphod

+0

Да, я отредактирую мои вопрос – Elvenpath

ответ

0

вы можете добавить дубликаты путем вызова конструктора списка

solutions.append(list(test)) 
0

если вы хотите чистый просто не использовать test.clear()

использование:

test = [] 

вы должны удалить test.clear(), и изменить < 100 из некоторого времени, потому что бесконечна

import random 
test = [] 
solutions = [] 

i = 0 
while i < 100: 
    for i in range(0, 64): 
     pos = random.randrange(0, 64) 
     test.append(pos) 
    solutions.append(test) 
+0

Это не решит проблему, так как это приведет к тому, что решения будут заполнены пустыми списками ... – Zaphod

+1

@ Zaphod: Это зависит от того, где вы его положили. Если вы положили его перед символом 'for i в диапазоне (64):' loop и remove 'test.clear()', он должен работать нормально. – zondo

+0

ahh, я не могу понять, что вам нужно точно – Milor123

0

Вы можете сделать копию списка, как:

solutions.append(test[:]) 

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

test = [] 

Как и в случае с Зафодом, ваша петля while никогда не заканчивалась, так как вы никогда не обновляли значение i, плюс все равно назначалось во внутреннем цикле. Почему бы не использовать две вложенные петли for? (подчеркивание является просто заполнителем var, означающим, что значение не используется)

import random 

test = [] 
solutions = [] 

for _ in range(0, 100): 
    for i in range(0, 64): 
     pos = random.randrange(0, 64) 
     test.append(pos) 
    solutions.append(test[:]) 
    test = [] 
print solutions 
+0

Это сработало для меня! Благодаря! @Edit Мне нужен список «новых списков», а не список «тот же список» Итак, вы отвечаете именно тем, что я искал. Еще раз спасибо :) – Elvenpath