Сделать числа отрицательными

Есть код, который реверсирует ВСЕ числа.

def make_negative(number):
    result = [x * -1 for x in number] 
    return result

Как сделать так, чтобы только положительные числа подверглись реверсии?


Ответы (5 шт):

Автор решения: Артем Торшин

Есть такая функция abs(). В вашем случае:

def make_negative(number):
    result = [abs(x) * -1 for x in number] 
    return result

print(make_negative([1,2,4,-12,-2]))
    [-1, -2, -4, -12, -2]
→ Ссылка
Автор решения: n1tr0xs

Есть несколько вариантов:

def f1(lst):
    return list(map(lambda x: -abs(x), lst))

def f2(lst):
    return [-abs(x) for x in lst]

По сути они ничем не отличаются. Также, если вам не нужен будет доступ по индексу lst[5], к примеру, а вы будете использовать их в цикле for, то можно возвращать не списки, а генератор (или объект map), т.к. они занимают меньше памяти

def f1(lst):
    return map(lambda x: -abs(x), lst)

def f2(lst):
    return (-abs(x) for x in lst)
→ Ссылка
Автор решения: Виктор Вронский

А если надо отбросить отрицательные и вывести только реверс положительных, то

def make_negative(number):
    result = [x * -1 for x in number if x > 0] 
    return result

print(make_negative([1,2,4,-12,-2]))
[-1, -2, -4]
→ Ссылка
Автор решения: CrazyElf

Всё же если следовать заданию буквально, и никак не преобразовывать исходные числа, не подходящие под условие, то можно использовать тернарный оператор:

result = [-x if x > 0 else x for x in number] 
→ Ссылка
Автор решения: Namerek

В копилку

result = [x * (-(x > 0) or 1) for x in range(-5, 6)]
# [-5, -4, -3, -2, -1, 0, -1, -2, -3, -4, -5]
→ Ссылка