python-3.x 如何将列表中的所有数字转换为负数?[duplicate]

ylamdve6  于 2022-12-15  发布在  Python
关注(0)|答案(7)|浏览(321)

此问题在此处已有答案

(23个答案)
Apply function to each element of a list(3个答案)
4个月前关闭。
在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)

当我想要一个为正,一个为负时,它会打印两个相同的列表。

zd287kbt

zd287kbt1#

最自然的方法是使用列表解析:

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

给予

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

xriantvc2#

如果要就地修改列表:

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

im9ewurl3#

您可以使用numpy包并执行numpy.negative()

kupeojn6

kupeojn64#

对于大型列表,请考虑使用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)
von4xj4u

von4xj4u5#

还有这种方法:
需要注意的是,只有当所有的数字都是正数时,这才有效。它不会影响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]
bvk5enib

bvk5enib6#

我将提供另一个使用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)",
)
gzjq41n4

gzjq41n47#

使用maplambda来完成这一操作,就像Python pro一样;)

mylist = [-2, -1, 0, 1, 2]
mylist = list(map(lambda x: -x if x > 0 else x, mylist))  # Or "lambda x: x*-1"
print(mylist)  # [-2, -1, 0, -1, -2]

相关问题