Потому что я не могу удалять объект списка в python?

Я представляю мой код:

numbers = list(range(0, 30, 2))
for i in range(0, 30):
    if numbers[i] % 2 == 0 and numbers[i] == 2:
        numbers[i] = 2 
    if numbers[i] % 2 == 0:
        numbers.remove(i)
print(numbers)

Traceback (most recent call last): File "F:/python/list.", line 7, in numbers.remove (i) ValueError: list.remove (x): x not in list

4
задан 26.12.2016, 22:28
0 ответов

Первое в твоем списке ты признаешь рангом 0-30 с step 2, а именно, эти три параметра:

start: Начни число последовательности

stop: Произведи числа до, но он не включает это число

step: Различие между каждым числом последовательности

Следовательно, ты показываешь ему, что было различие между каждым числом двух, что их было бы 15 чисел. Однако, как последний (30), он это не включает, в этом случае их было бы 14 чисел.

Первая ошибка, которую я вижу в твоем коде, состоит в том, что цикл, который ты реализуешь, ты делаешь с 0 до 29, и следовательно будут положения для numbers[i] что не будут существовать.

С другой стороны, ты попробован его удалить элемент, который не существует в твоем списке. Если ты обращаешь внимание, ты распределяешь ему весь промежуток времени стоимость 2 в элементы, в которые ты включаешь что-то. Однако, ты пробуешь удалять стоимость, которая не существует (1, 2, 3, 4...), так как твой список только составлен номеров 2, и ты попробован удалить стоимость iterador, которая в этом случае ты не хранишь в твоем списке, и следовательно не моги удалять.

3
ответ дан 03.12.2019, 17:58

я думаю, что проблема находится в следующем:

>>>list(range(0,30,2))

он пошлет список со следующими статьями:

>>>[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28]

это - то, что хранится в твоем списке. Одинокие 15 чисел все пары. for i in range (0,30) он имеет в виду элементы, которые не пары: (0,1,2,3... 29). Тогда твоя ошибка, - в котором ты просишь у него перемещать индекс, когда это не пара.

я даю тебе пример осветлитель: в ней первый повторение индекса 0; когда он прибудет в точку numbers.remove(i); i он будет стоить 0. Из-за того, что - индекс; случайно также это первая статья твоего списка. Однако во втором повторении; i берет стоимость 1; numbers [1] считает распределенной стоимость два, который согласно твоему коду входит в блок:

if numbers[i] % 2 == 0:
        numbers.remove(i)

но.: как он будет перемещать в стоимость 1? это число не в списке. Я надеюсь, что он подал тебе это объяснение. Привет.

1
ответ дан 03.12.2019, 17:58

Теги

Похожие вопросы