2013-11-01 23 views
4

我試圖將包含負值的列表轉換爲非負值列表;反轉負面的。我試過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] 

回答

8

嘗試列表理解:

x2 = [abs(k) for k in x] 
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)) 

希望這有助於!

4

簡單的Python的方式是上面的列表理解,但如果你使用numpy的其他的事,你可以這樣做:

x2 = numpy.abs(x) 

,無需轉換或做任何循環。

+0

這是一個有點過頭了,沒有必要在這裏numpy的。 – aIKid

+0

我同意,並在我的回答中提出警告;然而,從語法的角度來看,它是最短和最簡單的選項,看起來問題來自相對缺乏經驗的python-er,他可能沒有聽說過列表解析或映射。 –

+0

而且......可能從來沒有聽說過numpy。那麼,你確實有一個好點。 – aIKid

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] 
+2

您不必這樣做,您可以使用'abs'代替。 Python提供了一個內置函數。 – aIKid

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]