#python #list #while-loop
Вопрос:
Добрый день. Я новичок в кодировании и python.
Моя цель-попытаться создать код, в котором, если элемент в y достигнет следующего 0, все значения от 0 до n (до следующего нуля) станут n. Пример вывода должен выглядеть следующим образом после выполнения приведенного ниже кода:
y = [0,1,2,3,4,5,6,7,8,0,1,0,1,2,3,4,5,6,7]
# I am interating over two inputs. y_1 = y[1:] and append 0 at the end.
y_1 = [1,2,3,4,5,6,7,8,0,1,0,1,2,3,4,5,6,7,0]
expected output:
x = [8, 8, 8, 8, 8, 8, 8, 8, 8, 1, 1, 7, 7, 7, 7, 7, 7, 7, 7]
Проблема, с которой я сталкиваюсь, я полагаю, связана с тем, что цикл while не повторяется после [0,1,2,3,4,5,6,7,8]
удаления из списка, как указано в приведенном ниже коде (который, по логике, должен повторяться?) :
y = [0,1,2,3,4,5,6,7,8,0,1,0,1,2,3,4,5,6,7]
y_1 = [1,2,3,4,5,6,7,8,0,1,0,1,2,3,4,5,6,7,0]
x = []
while len(y):
for i, j in zip(y, y_1):
if i > j:
z = i
for k in range(z 1):
x.append(y[i])
del y[0:z 1]
del y_1[0:z 1]
elif i == j:
z = 0
x.append(z)
del y[z]
del y_1[z]
Любое предложение будет с благодарностью воспринято 🙂
Комментарии:
1. Вы не должны удалять из списка, который вы повторяете.
2. y_1 в этом коде-это y[1:] с добавлением 0 в конце
3. не используйте
del
, потому что это изменяет список, который вы используете вfor
цикле,zip(y, y_1)
и он может остановить его раньше, чем вы ожидаете. Кроме того, вам не нужно удалять его, чтобы получить ожидаемый результат. И удалитеwhile len(y)
— вам это тоже не нужно.4. короче
y_1 = y[1:] [0]
Ответ №1:
Я не знаю, почему вы используете del
и while
потому что вы должны получить ожидаемый результат, делая
y = [0,1,2,3,4,5,6,7,8,0,1,0,1,2,3,4,5,6,7]
y_1 = y[1:] [0]
x = []
for i, j in zip(y, y_1):
if i > j:
z = i
for k in range(z 1):
x.append(y[i])
elif i == j:
z = 0
x.append(z)
print(x)
В Python вы не должны удалять элемент из списка, который вы используете как for
цикл, потому что, когда он удаляет элемент, он перемещает другие элементы в список, используемый как for
цикл, и это может дать неожиданные результаты.
Если вы действительно хотите запустить его в некоторых while len(y)
, то вам лучше создать новый список с элементами, которые вы хотите сохранить. Или вы должны дублировать список — y_duplicated = y.copy()
— и удалить в дублированном списке, а после for
цикла заменить исходный список y = y_duplicated
Комментарии:
1. Спасибо! это помогло решить мою проблему. 🙂 Моя логика заключалась в том, чтобы удалить элементы, чтобы индекс начинался с нуля. Следовательно, используйте цикл while до тех пор, пока исходный список не опустеет. Я не знал о неожиданных результатах при удалении списка в циклическом действии.