Я хотел удалить из списка числа, делящиеся на 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)
Я бы построил новый список с хорошими значениями:
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)
Изменение списка во время его повторения проблематично. Самое простое решение — создать новый список.