Я создал функцию и передаю функцию список строк, как это: ['CC', 'DC', 'EC', 'FC', 'GC', 'HC', 'XX']
Изменение значения элемента в списке в Python для цикла
Я создал переменную X с 26 значениями; Я называю эти значения «карточкой» в моем коде ниже («для карты в X»).
Я использую itertools и списки для создания списка строк, чтобы каждое значение в X было заменено на «XX» в новом списке.
Например: ['CC', 'DC', 'EC', 'FC', 'GC', 'HC', 'XX']
расширится ['CC', 'DC', 'EC', 'FC', 'GC', 'HC', 'value1'], ['CC', 'DC', 'EC', 'FC', 'GC', 'HC', 'value2'] etc
я создаю список значений с именем TMP и подставляя список значений «X» (так называемый карт) для одного из элементов в TMP (так называемый «XX») с использованием цикла for.
unitoffive = list(itertools.combinations(unit,5))
newunit = [list(line) for line in unitoffive if 'XX' in line]
tmp = [[line,card] for line in newunit for card in X]
for line in tmp:
line[0][4] = line.pop(line.index(line[1]))
print line
for line in tmp:
print line
Мой сценарий демонстрирует поведение, которое я не могу понять. Когда оператор строки печати в моем первом цикле for выполняется, я вижу измененный список, который я ожидаю. Когда вызывается второй оператор строки печати, я вижу другую и неправильную версию моего списка. Я не могу вернуться и использовать tmp, поскольку он только содержит правильные значения в цикле for, в котором он был изменен.
Я знаю, что списки Python могут быть сложными для изменения в цикле for, и я попытался изменить свой код на цикл за for line in tmp[:]
, но это не решило мою проблему.
Оператор печать строки в этом разделе коды отпечатков ['CC', 'DC', 'EC', 'FC', 'GC', 'HC', 'value1'], ['CC', 'DC', 'EC', 'FC', 'GC', 'HC', 'value2'] etc
как ожидалось:
for line in tmp:
line[0][4] = line.pop(line.index(line[1]))
print line
оператора печать строки после него печатает ['CC', 'DC', 'EC', 'FC', 'GC', 'HC', 'value26'], ['CC', 'DC', 'EC', 'FC', 'GC', 'HC', 'value26'] etc
Какой вклад вы даете сценарий? Какой результат вы получаете? Какой результат вы ожидали? Можете ли вы включить это в свой вопрос? –
Единственное, что вы не можете сделать, перейдя по списку, это изменить его длину. Добавьте некоторые примеры данных, и вам будет легко найти вашу ошибку. –
Этот код делает то, что я ожидал бы, прочитав его и проверив его с помощью некоторых случайных строк. Я думаю, вам придется объяснить, что вы вкладываете, и что вы хотите получить. – senderle