在列表中反转负值

时间:2013-11-01 03:44:34

标签: python

我正在尝试将包含负值的列表转换为非负值列表;颠倒负面的。我试过了abs,但它没有用。

我的输入是

x = [10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10]

当我尝试计算区域

时,如何使其成为这种格式
x = [10,9,8,7,6,5,4,3,2,1,0,1,2,3,4,5,6,7,8,9,10]

5 个答案:

答案 0 :(得分:8)

尝试列表理解:

x2 = [abs(k) for k in x]

答案 1 :(得分:5)

您的尝试无效,因为abs()采用整数而不是列表。要做到这一点,你必须循环遍历列表:

x = [10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10]
for i in range(len(x)):
     x[i] = abs(x[i])

或者你可以使用更短的列表理解:

x = [abs(i) for i in x]

或者只是使用内置的map函数,它甚至更短:)

x = list(map(abs, x))

希望这有帮助!

答案 2 :(得分:4)

简单的pythonic方式是上面的列表理解,但如果你正在使用Numpy做任何其他事情:

x2 = numpy.abs(x)

无需转换或进行任何循环。

答案 3 :(得分:1)

你想要的是使用绝对值(| x | = x,如果x> 0,| x | = -x,如果x <0)

for index in range(len(x)):
    x[index] =  x[index] if x[index] > 0 else -x[index]

答案 4 :(得分:1)

这是对你的问题的错误答案,但这就是我来这里寻找的。这是使用operator.neg反转列表中所有数字的方法;也就是消极的积极因素。

import operator
x = [10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10]
x = list(map(operator.neg, x))

它返回:

[-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

或者你可以做一个列表理解当然:

x = [-xi for xi in x]