2011-11-23 49 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

相关问题