Python 如何将列表中的每个元素除以int?

Python 如何将列表中的每个元素除以int?,python,Python,我只想把列表中的每个元素除以一个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)] 错误:

我只想把列表中的每个元素除以一个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)

但是有没有更简单/更快的方法呢?

惯用的方法是使用列表理解:

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]

您第一次尝试的方式实际上可以通过以下方式直接实现:


如果您使用长列表执行此类操作,尤其是在任何类型的科学计算项目中,我建议您使用numpy。

摘要版本可以是:

import numpy as np
myList = [10, 20, 30, 40, 50, 60, 70, 80, 90]
myInt = 10
newList  = np.divide(myList, myInt)

我正在运行一些答案,以了解对于大量用户来说什么是最快的方式。因此,我发现我们可以将int转换成数组,它可以给出正确的结果,而且速度更快

  arrayint=np.array(myInt)
  newList = myList / arrayint
这是上面所有答案中的一个

import numpy as np
import time
import random
myList = random.sample(range(1, 100000), 10000)
myInt = 10
start_time = time.time()
arrayint=np.array(myInt)
newList = myList / arrayint
end_time = time.time()
print(newList,end_time-start_time)
start_time = time.time()
newList = np.array(myList) / myInt
end_time = time.time()
print(newList,end_time-start_time)
start_time = time.time()
newList = [x / myInt for x in myList]
end_time = time.time()
print(newList,end_time-start_time)
start_time = time.time()
myList[:] = [x / myInt for x in myList]
end_time = time.time()
print(newList,end_time-start_time)
start_time = time.time()
newList = map(lambda x: x/myInt, myList)
end_time = time.time()
print(newList,end_time-start_time)
start_time = time.time()
newList = [i/myInt for i in myList]
end_time = time.time()
print(newList,end_time-start_time)
start_time = time.time()
newList  = np.divide(myList, myInt)
end_time = time.time()
print(newList,end_time-start_time)
start_time = time.time()
newList  = np.divide(myList, myInt)
end_time = time.time()
print(newList,end_time-start_time)

在这种情况下,你认为map比列表理解更好吗?我只是想知道我是否会去理解列表,因为它更容易阅读。@AndrewCox我更喜欢map(来自非python背景)。对我来说,列表理解似乎也更清晰,所以你可能应该这样做。你知道这是否比soulcheck和berkantk发布的解决方案更快吗?@Casa:有人在进行了测试。结论似乎是列表理解在这种特殊情况下是成功的。现在
map()
返回一个map对象,因此如果你想要一个列表,你必须明确地说
list()
。所以在这种情况下:
newList=list(map(lambda x:x/myInt,myList))
给定一个静态列表大小,这两种方法中的任何一种都会比[myList[0]/myInt,myList[1]/myInt]@user1938107快,几乎可以肯定不会,但这也是一种你无论如何都应该避免的微优化。我知道这是一个老生常谈的回答,但对于仍在阅读它的人来说:请记住,在使用numpy.array时,你应该为loat指定类型,例如
numpy.array([10,20,30,40,50,60,70,80,90],dtype='f')
。否则除以3只会得到3作为结果,而不是3.333..@RichardBoonen在这种情况下OP想要进行整数除法,但是如果你想进行浮点除法,你是对的,你必须将类型指定为numpy。或者在列表中放一个浮点数:
numpy.array([10,20,30,40,50,60,70,80,90])
你能写得更短吗?
import numpy as np
myList = [10, 20, 30, 40, 50, 60, 70, 80, 90]
myInt = 10
newList  = np.divide(myList, myInt)
myInt=10
myList=[tmpList/myInt for tmpList in range(10,100,10)]
  arrayint=np.array(myInt)
  newList = myList / arrayint
import numpy as np
import time
import random
myList = random.sample(range(1, 100000), 10000)
myInt = 10
start_time = time.time()
arrayint=np.array(myInt)
newList = myList / arrayint
end_time = time.time()
print(newList,end_time-start_time)
start_time = time.time()
newList = np.array(myList) / myInt
end_time = time.time()
print(newList,end_time-start_time)
start_time = time.time()
newList = [x / myInt for x in myList]
end_time = time.time()
print(newList,end_time-start_time)
start_time = time.time()
myList[:] = [x / myInt for x in myList]
end_time = time.time()
print(newList,end_time-start_time)
start_time = time.time()
newList = map(lambda x: x/myInt, myList)
end_time = time.time()
print(newList,end_time-start_time)
start_time = time.time()
newList = [i/myInt for i in myList]
end_time = time.time()
print(newList,end_time-start_time)
start_time = time.time()
newList  = np.divide(myList, myInt)
end_time = time.time()
print(newList,end_time-start_time)
start_time = time.time()
newList  = np.divide(myList, myInt)
end_time = time.time()
print(newList,end_time-start_time)