给定一个floats
spendList的列表,我想将round()
应用到每个项目,并使用舍入值更新列表,或者创建一个新列表。在
我设想使用列表理解来创建新列表(如果原始列表不能被覆盖),但是如何将每个项传递给round()
?在
我发现序列解包here所以尝试:
round(*spendList,2)
得到了:
^{pr2}$因此,我猜测round
试图取整列表中的每一项,于是我尝试:
[i for i in round(*spendList[i],2)]
得到了:
In [293]: [i for i in round(*spendList[i],2)]
File "<ipython-input-293-956fc86bcec0>", line 1
[i for i in round(*spendList[i],2)]
SyntaxError: only named arguments may follow *expression
序列解包甚至可以在这里使用吗?如果没有,如何实现?在
您可以使用
map()
函数来执行此操作-对于python3.x,您需要使用
list(map(...))
,就像在python3.x中一样map
返回迭代器而不是列表。在你仍然可以使用你所说的列表理解,但是,就这样:
新的清单将是: [1.12、4.56、6.76、8.45]
你把你的list comprehension弄错了方向:
应该是:
^{pr2}$您需要迭代
spendList
,并将round
应用于其中的每个项。这里不需要*
(“splat”)解包;这通常只需要接受任意数量的位置参数的函数(根据错误消息,round
只需要两个)。在相关问题 更多 >
编程相关推荐