如何巧妙地将 Python 列表中的每一项传递给函数并更新列表(或创建一个新列表)
How to neatly pass each item of a Python list to a function and update the list (or create a new one)
给定 floats
spendList 的列表,我想将 round()
应用到每个项目,然后用四舍五入的值更新列表,或创建一个新列表。
我想象这会使用列表理解来创建新列表(如果原始列表不能被覆盖),但是将每个项目传递给 round()
呢?
我发现序列解包 here 所以尝试过:
round(*spendList,2)
并得到:
TypeError Traceback (most recent call last)
<ipython-input-289-503a7651d08c> in <module>()
----> 1 round(*spendList)
TypeError: round() takes at most 2 arguments (56 given)
所以推测 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()
函数 -
>>> lst = [1.43223, 1.232 , 5.4343, 4.3233]
>>> lst1 = map(lambda x: round(x,2) , lst)
>>> lst1
[1.43, 1.23, 5.43, 4.32]
对于 Python 3.x ,你需要使用 list(map(...))
作为 Python 3.x map
returns 迭代器不是列表。
你的 list comprehension 方向错了:
[i for i in round(*spendList[i],2)]
应该是:
[round(i, 2) for i in spendList]
您想遍历 spendList
,并将 round
应用于其中的每个项目。这里不需要*
("splat")解包;这通常只需要接受任意数量的位置参数的函数(并且,根据错误消息,round
只需要两个)。
你仍然可以使用你所说的列表理解,只是这样:
list = [1.1234, 4.556567645, 6.756756756, 8.45345345]
new_list = [round(i, 2) for i in list]
new_list 将是:
[1.12, 4.56, 6.76, 8.45]
给定 floats
spendList 的列表,我想将 round()
应用到每个项目,然后用四舍五入的值更新列表,或创建一个新列表。
我想象这会使用列表理解来创建新列表(如果原始列表不能被覆盖),但是将每个项目传递给 round()
呢?
我发现序列解包 here 所以尝试过:
round(*spendList,2)
并得到:
TypeError Traceback (most recent call last)
<ipython-input-289-503a7651d08c> in <module>()
----> 1 round(*spendList)
TypeError: round() takes at most 2 arguments (56 given)
所以推测 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()
函数 -
>>> lst = [1.43223, 1.232 , 5.4343, 4.3233]
>>> lst1 = map(lambda x: round(x,2) , lst)
>>> lst1
[1.43, 1.23, 5.43, 4.32]
对于 Python 3.x ,你需要使用 list(map(...))
作为 Python 3.x map
returns 迭代器不是列表。
你的 list comprehension 方向错了:
[i for i in round(*spendList[i],2)]
应该是:
[round(i, 2) for i in spendList]
您想遍历 spendList
,并将 round
应用于其中的每个项目。这里不需要*
("splat")解包;这通常只需要接受任意数量的位置参数的函数(并且,根据错误消息,round
只需要两个)。
你仍然可以使用你所说的列表理解,只是这样:
list = [1.1234, 4.556567645, 6.756756756, 8.45345345]
new_list = [round(i, 2) for i in list]
new_list 将是: [1.12, 4.56, 6.76, 8.45]