Непонятна логика
i = 0
save = []
while i <= 9:
arr = int(input(("Введите число:")))
save += [arr]
i += 1
def positive_sum(arr):
for i in arr:
if i < 0:
arr.remove(i)
print(arr)
positive_sum(save)
Есть значит такой код, который должен отрицательное число со списка удалить, но какие-то он удаляет, а некоторые отрицательные оставляет почему так? Вот к примеру что вывелось в конце [213, 1, 23, 4, 21, -2, -4] Хотя -2 и -4 не должно быть.
Ответы (1 шт):
потому что НИКОГДА НЕ УДАЛЯЙТЕ ЭЛЕМЕНТЫ ДВИГАЯСЬ ПО СПИСКУ!!!
ошибка многих - вы идете по списку от его начало до конца, но удаляя элемент вы сокращаете его размер и как бы сдвигаетесь еще вперед, в итоге ваша нумерация слетает и возникает ошибка в логике
режьте с помощью filter
save = list(filter(lambda elem: elem >= 0, save))
т.е. вы собираете новый список из элементов старого, которые не меньше 0
ну или можно собрать новый список из старого через for if
save = [elem for elem in save if elem >= 0]
при простых условиях это выглядит короче, чем через filter
P.S.
кстати зачем такой изврат?
i = 0
while i <= 9:
arr = int(input(("Введите число:")))
save += [arr]
i += 1
можно же
save = [int(input(("Введите число:"))) for i in range(10)]
ну или если не нравится в 1 строку, то
for i in range(10):
save += [int(input(("Введите число:")))]
а если числа передать через пробел то вообще можно так:
save = list(map(int, input().split()))[:10]