2011-11-23 113 views
81

我只想用int來分隔列表中的每個元素。你如何用int分隔列表中的每個元素?

myList = [10,20,30,40,50,60,70,80,90] 
myInt = 10 
newList = myList/myInt 

這是錯誤:

TypeError: unsupported operand type(s) for /: 'list' and 'int' 

我明白爲什麼我收到此錯誤。但我很沮喪,我找不到解決方案。

也試過:

newList = [ a/b for a, b in (myList,myInt)] 

錯誤:

ValueError: too many values to unpack 

預期結果:

newList = [1,2,3,4,5,6,7,8,9] 


編輯:

下面的代碼給我我預期的結果:

newList = [] 
for x in myList: 
    newList.append(x/myInt) 

但有一個更容易/更快的方式做到這一點?

回答

137

的慣用方式是使用列表理解:

myList = [10,20,30,40,50,60,70,80,90] 
myInt = 10 
newList = [x/myInt for x in myList] 

,或者,如果你需要保持參照原始列表:

myList[:] = [x/myInt for x in myList] 
+0

給出了一個靜態列表大小,這些方法中的任何一個比mylist [0]/myint,mylist [1]/myint] – user1938107

+1

@ user1938107幾乎肯定不會,但這也是您應該進行的那種微型優化無論如何。 – soulcheck

17
>>> myList = [10,20,30,40,50,60,70,80,90] 
>>> myInt = 10 
>>> newList = map(lambda x: x/myInt, myList) 
>>> newList 
[1, 2, 3, 4, 5, 6, 7, 8, 9] 
+0

在這種情況下,你認爲地圖比列表理解更好嗎?我只是想知道,因爲它更容易閱讀,所以我不想去理解列表。 –

+0

@AndrewCox我更喜歡地圖(來自非python背景)。列表理解對我來說似乎也更清晰,所以你應該去做。 – Dogbert

+0

你知道這是否比解決方案soulcheck和berkantk更快? – Casa

7
myList = [10,20,30,40,50,60,70,80,90] 
myInt = 10 
newList = [i/myInt for i in myList] 
48

方式你先試過的其實是直接可以用numpy

import numpy 
myArray = numpy.array([10,20,30,40,50,60,70,80,90]) 
myInt = 10 
newArray = myArray/myInt 

如果你使用長列表進行這樣的操作,特別是在任何科學計算項目中,我真的會建議使用numpy。

+0

我知道這是一箇舊回覆,但對於任何仍在閱讀的人: 請記住,使用numpy.array時,應該指定類型例如'numpy.array([10,20,30,40,50,60,70,80,90],dtype ='f')'爲憎恨。否則,除以3將會給你3結果,而不是3.333 .. –

+1

@RichardBoonen在這種情況下,OP想要做int分割,但是如果你想做float division,你是對的,你必須指定類型爲numpy。或者在列表中放一個浮點數:''numpy.array([10.,20,30,40,50,60,70,80,90])''' – silvado

相關問題