Программа Python для удаления из списка чисел, делящихся на 5, возвращает неверные значения

Я хотел удалить из списка числа, делящиеся на 5, но когда числа, делящиеся на 5, стоят рядом друг с другом, он не удалит второе. Может кто-нибудь сказать мне, что я делаю неправильно? Вот код:

my_list = []
n = int(input("Size of list: "))

for i in range(n):
    my_list.append(int(input("Enter value: ")))

for i in my_list:
    if i % 5 != 0:
        continue
    else: 
        my_list.remove(i)


print(my_list)

Изменение списка во время его повторения проблематично. Самое простое решение — создать новый список.

Jussi Nurminen 15.12.2020 12:35
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
1
2 386
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Я бы построил новый список с хорошими значениями:

new_list = [item for item in my_list if item % 5 != 0]

Вы добавляете его в тот же список. Нравиться: если массив 4,5,10,6 тогда во-первых a[1] это 5 после того, как вы удалите это из списка цикл for переходит к a[2], который теперь 6, поскольку новый массив 4,10,6

Просто прокрутите копию своего списка, чтобы удаление элементов не повлияло на процесс. Исправленные строки с комментариями:

my_list = []
n = int(input("Size of list: "))

for i in range(n):
    my_list.append(int(input("Enter value: ")))

my_list2=my_list.copy() #create a copy of my_list

for i in my_list2: #loop through my_list2
    if i % 5 != 0:
        continue
    else: 
        my_list.remove(i)


print(my_list)

Когда вы удаляете элемент с номером i = 5, оставшиеся элементы сдвигаются на одну позицию влево. Таким образом, следующий элемент в позиции 6 перемещается в текущую позицию 5, и после увеличения i на 1 число пропускается.

Используйте функцию фильтра, чтобы создать новый список только с номерами, которые удовлетворяют условию.

my_list = []
n = int(input("Size of list: "))

for i in range(n):
    my_list.append(int(input("Enter value: ")))

filtered_list = list(filter(lambda x: x % 5 == 0, my_list))

print(filtered_list)
filtered_list = list(filter(lambda x: x % 5 != 0, my_list))
in above program. Instead of equal to write not equal to it works

my_list = []
n = int(input("Size of list: "))

for i in range(n):
    my_list.append(int(input("Enter value: ")))

filtered_list = list(filter(lambda x: x % 5 != 0, my_list))

print(filtered_list)

Другие вопросы по теме