如何巧妙地将Python列表的每一项传递给函数并更新列表(或创建一个新列表)

2024-10-03 21:31:23 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一个floatsspendList的列表,我想将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

序列解包甚至可以在这里使用吗?如果没有,如何实现?在


Tags: 项目in列表forinputhereipython序列
3条回答

您可以使用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]

对于python3.x,您需要使用list(map(...)),就像在python3.x中一样map返回迭代器而不是列表。在

你仍然可以使用你所说的列表理解,但是,就这样:

list = [1.1234, 4.556567645, 6.756756756, 8.45345345]
new_list = [round(i, 2) for i in list]

新的清单将是: [1.12、4.56、6.76、8.45]

你把你的list comprehension弄错了方向:

[i for i in round(*spendList[i],2)]

应该是:

^{pr2}$

您需要迭代spendList,并将round应用于其中的每个项。这里不需要*“splat”)解包;这通常只需要接受任意数量的位置参数的函数(根据错误消息,round只需要两个)。在

相关问题 更多 >