Найти - Пользователи
Полная версия: Убрать из списка все отрицательные числа и вывести список
Начало » Python для новичков » Убрать из списка все отрицательные числа и вывести список
1 2 3 4
Tenshiqq
Всем привет! Пытался написать такую простенькую функцию:
 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)
И как бы она работает, но не совсем правильно. Если в списке идут два отрицательных числа подряд, то программа удалит первое, а второе оставит. Помогите
ZerG
Оберните код в тег код
AD0DE412
вот так
Tenshiqq
Отредактировал
ZerG
Проблема в том что каждый раз в вашем цикле после удаления меняется сам список
выполните данный код что бы понять суть

 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)
AD0DE412
тут такое дело у вас короче
во время прогона у вас 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]


py.user.next
  
>>> 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]
>>>
ZerG
py.user.next
ну del и pop все же не remove
marvellik
 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)
xam1816
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)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB