Как превратить все числа в списке в их отрицательные аналоги?

Я пытаюсь превратить список положительных чисел в список отрицательных чисел с одинаковым значением в Python 3.3.3

Например поворот [1,2,3] в [-1,-2,-3]

У меня есть этот код:

xamount=int(input("How much of x is there"))
integeramount=int(input("How much of the integer is there"))
a=1
lista=[]
while(a<=integeramount):
    if(integeramount%a==0):
        lista.extend([a])
    a=a+1
listb=lista
print(listb)
[ -x for x in listb]
print(listb)

Это печатает два одинаковых списка, когда я хочу, чтобы один был положительным, а другой - отрицательным.

8 ответов

Наиболее естественный способ - использовать понимание списка:

mylist = [ 1, 2, 3, -7]
myneglist = [ -x for x in mylist]
print(myneglist)

дает

[-1, -2, -3, 7]

Вы можете использовать пакет numpy и сделать numpy.negative()

Если вы хотите изменить список на месте:

mylist = [ 1, 2, 3, -7]
print(mylist)
for i in range(len(mylist)):
    mylist[i] = -mylist[i]
print(mylist)

Для большого списка, вы, вероятно, лучше использовать numpy

import numpy as np

a=np.array([1,2,3,4])

# result as a numpy array
b=-a

# can be casted back to list
c=list(b)

Есть также этот метод:

Небольшое примечание, это будет работать, только если все числа начинают положительными. Это не повлияет на 0. Если у вас отрицательные числа, которые вы не хотите менять, вам нужно добавить оператор IF ниже.

if num < 0: continue
numbers = [1, 2, 3, 4 ,5]
for num in numbers:
    numbers[num-1] = num - (2*num)

numbers
[-1, -2, -3, -4, -5]

Использовать map а также lambda чтобы сделать это, как профессионал Python ...

      mylist = [1, 2, 3, 4, 5]
mylist = list(map(lambda x: -x, mylist))  # Or "lambda x: x*-1"
print(mylist)  # [-1, -2, -3, -4, -5]

Я собирался предложить другое решение, используя map:

      >>> from operator import neg
>>> list(map(neg, data))

Хотя я хотел увидеть скорость по сравнению с простым пониманием, а также с numpy, и хотя это зависит от длины списка для нативных решений, numpy - это путь для больших наборов данных:

Код для воспроизведения сюжета:

      import perfplot
import numpy as np
from operator import neg

def list_comp(data): return [ -x for x in data]
def map_neg(data): return list(map(neg, data))
def np_neg(data): return np.negative(data)

perfplot.save(
    "argsort.png",
    setup=lambda n: np.random.rand(n),
    kernels=[list_comp, map_neg, np_neg],
    n_range=[2 ** k for k in range(15)],
    xlabel="len(data)",
)

ДЛЯ РАКЕТКИ:

      enter code here

(define (negativelist lst)(cond [(empty? lst) '()][(cons (* -1 (first lst))(negativelist (rest lst)))]))

Другие вопросы по тегам