在Python中对列表进行数学运算

30

我该如何把[111, 222, 333]这个数字列表中的每个数都乘以3,得到[333, 666, 999]呢?


你可以使用列表推导式来完成任务(list comprehension)。另外,你也可以参考一下《笨办法学Python》(Learn Python the Hard Way)这本书。 - Telemachus
@telemachus,我真的不明白,你能给我提供与我的问题示例相关的代码吗? - JShoe
5个回答

41
[3*x for x in [111, 222, 333]]

24
如果你将会进行大量的数组操作,那么你可能会发现安装 Numpy 很有用。这样你就可以在数组上使用普通的算术运算,还有许多用于数组计算的有用函数。
>>> import numpy
>>> a = numpy.array([111,222,333])
>>> a * 3
array([333, 666, 999])
>>> a + 7
array([118, 229, 340])
>>> numpy.dot(a, a)
172494
>>> numpy.mean(a), numpy.std(a)
(222.0, 90.631120482977593)

4

作为替代方案,您可以使用以下命令中的地图命令:

map(lambda x: 3*x, [111, 222, 333])

如果您需要对序列应用更复杂的函数,这将非常方便。


这只是返回一个<map object at...>一些内存指针,你如何实际从中获取数据? - george
2
@george 这可能不再适用,但如果能帮到其他人:maplist是两种不同的数据类型(我认为在Python 3.x中这变得更加明确),将一个map转换为一个list,只需使用list()函数。因此上面的示例将变为list(map(lambda x: 3 * x,[111,222,333])) - Ronikos

1

这里有一组方便的函数,可对列表执行几个基本操作。它使用了listfun模块中的'Listoper'类,可以通过pip安装。 适用于您情况的函数是: “listscale(a,b):如果“a”是标量,则返回标量“a”与列表“b”的乘积列表,否则反之。” 代码:

!pip install listfun
from listfun import Listoper as lst
x=lst.listscale(3,[111,222,333])
print(x)

输出:

[333, 666, 999]

当然,如果只是一次性操作,你可以像其他人建议的那样使用列表推导式,但如果你需要执行多个列表操作,那么listfun可能会有所帮助。

希望这可以帮到你

链接到PypI: https://pypi.org/project/listfun/1.0/ 文档和示例代码可以在Readme文件中找到:https://github.com/kgraghav/Listfun


但是OP问道:“如何使用[111, 222, 333]生成[333, 666, 999]?” - Ahmet
@Ahx 感谢您指出,我已更新我的帖子以澄清。 - krish

1

使用地图的另一种替代方法:

def multiply(a):
   return a * 3

s = list(map(multiply,[111,222,333]))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接