如何用int划分列表中的每个元素?

Cas*_*asa 130 python

我只是想用一个int来划分列表中的每个元素.

myList = [10,20,30,40,50,60,70,80,90]
myInt = 10
newList = myList/myInt
Run Code Online (Sandbox Code Playgroud)

这是错误:

TypeError: unsupported operand type(s) for /: 'list' and 'int'
Run Code Online (Sandbox Code Playgroud)

我明白为什么我收到这个错误.但我很沮丧,我找不到解决方案.

还尝试过:

newList = [ a/b for a, b in (myList,myInt)]
Run Code Online (Sandbox Code Playgroud)

错误:

ValueError: too many values to unpack
Run Code Online (Sandbox Code Playgroud)

预期结果:

newList = [1,2,3,4,5,6,7,8,9]
Run Code Online (Sandbox Code Playgroud)


编辑:

以下代码给出了我的预期结果:

newList = []
for x in myList:
    newList.append(x/myInt)
Run Code Online (Sandbox Code Playgroud)

但有更容易/更快的方法吗?

sou*_*eck 204

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

myList = [10,20,30,40,50,60,70,80,90]
myInt = 10
newList = [x / myInt for x in myList]
Run Code Online (Sandbox Code Playgroud)

或者,如果您需要维护对原始列表的引用:

myList[:] = [x / myInt for x in myList]
Run Code Online (Sandbox Code Playgroud)

  • @ user1938107几乎肯定没有,但这也是你应该避免的那种微优化. (6认同)

sil*_*ado 67

您首先尝试的方式实际上可以直接使用numpy:

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

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

  • @RichardBoonen 在这种情况下,OP 想要进行 int 除法,但是如果您想要进行浮点除法,您是对的,您必须将类型指定为 numpy。或者在列表中放一个浮点数:``numpy.array([10.,20,30,40,50,60,70,80,90])`` (3认同)
  • 我知道这是一个旧的回复,但对于仍然阅读它的人:请记住,当使用numpy.array时,你应该指定类型为例如`numpy.array([10,20,30,40,50,60,70,对于厌恶而言,80,90],dtype ='f')` 否则除以3会得到3而不是3.333 .. (2认同)

Dog*_*ert 22

>>> 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]
Run Code Online (Sandbox Code Playgroud)

  • 现在`map()`返回一个map对象,所以如果你想要一个列表,你必须明确地说`list()`.所以在这种情况下:`newList = list(map(lambda x:x/myInt,myList))` (4认同)

小智 11

抽象版本可以是:

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


Not*_*ase 8

myList = [10,20,30,40,50,60,70,80,90]
myInt = 10
newList = [i/myInt for i in myList]
Run Code Online (Sandbox Code Playgroud)