Форум сайта python.su
1
Всем привет! Пытался написать такую простенькую функцию:
a = [91, -32, 67, -4, -91, 63, 56, 40, -45, 72, 0] def f(arr): for i in arr: if i<0: arr.remove(i) print(arr) f(a)
Отредактировано Tenshiqq (Июль 10, 2022 08:52:44)
Офлайн
61
Оберните код в тег код
Офлайн
44
вот так
и вставьте ссылку на его url Офлайн
1
Отредактировал
Офлайн
61
Проблема в том что каждый раз в вашем цикле после удаления меняется сам список
выполните данный код что бы понять суть
a = [1, -1, 2, -2, -3, -4, 3, 4, 5] def f(arr): neg_list = [] pos_list = [] locarr = arr.copy() for i in locarr: if i <= 0: print(f"index:{arr.index(i)} ARR:{arr}") arr.remove(i) neg_list.append(i) else: pos_list.append(i) print(neg_list) print(pos_list) print(arr) f(a)
Офлайн
44
тут такое дело у вас короче
во время прогона у вас arr меняется
вещь чреватая ошибками и неопределенностью
мне таких ошибок не пришлось делать ну по тому что лутц
a = [91, -32, 67, -4, -91, 63, 56, 40, -45, 72, 0] def f(arr): xz = [] for i in arr: print() if i>=0: xz.append(i) print(xz) f(a)
не делай так как в этой цитате кprint([a.remove(a[i]) for i in range(len(a)) if a[i] <= 0])
токашто у меня таже ошибка в представлении случилась Tenshiqq прикиньтипа тут же беру и на ходу все не нужное удаляю (блин надо идти спать)
b = a[:] [b.remove(a[i]) or print(b) for i in range(len(a)) if a[i] < 0]
и вставьте ссылку на его url Отредактировано AD0DE412 (Июль 10, 2022 10:30:24)
Офлайн
857
>>> def f(arr): ... i = len(arr) ... while i > 0: ... i -= 1 ... if arr[i] < 0: ... del arr[i] ... return arr ... >>> a = [91, -32, 67, -4, -91, 63, 56, 40, -45, 72, 0] >>> f(a) [91, 67, 63, 56, 40, 72, 0] >>>
Офлайн
61
py.user.nextну del и pop все же не remove
Офлайн
73
a = [91, -32, 67, -4, -91, 63, 56, 40, -45, 72, 0] def f(arr): for i in range(len(arr))[::-1]: if arr[i] < 0: arr.remove(arr[i]) print(arr) f(a)
Офлайн
124
Tenshiqq
Убрать из списка все отрицательные числа и вывести список
def check_value(val): if val >= 0: return True a = [91, -32, 67, -4, -91, 63, 56, 40, -45, 72, 0] new_lst = [i for i in a if check_value(i)] print(new_lst)
Офлайн