首页 > 解决方案 > Core Julia Devs 在 Julia 中考虑了哪些 Python 样式的列表理解和生成器?

问题描述

如果我在 Julia 1.0.0 在线文档中搜索list,第一个命中是:

可以通过在列表中的每个项目前加上 *、+ 或 - 来编写无序列表。

这是一个名为“Markdown 语法”的主题,显然与 Python 样式的列表无关。

另一个打击,更进一步的是:

与 Python 的显着差异(部分)

我没有看到list本节中提到的词。

搜索“列表理解”,提供的第 10 个命中为:

领悟(部分)

从...开始,

理解提供了一种通用且强大的方法来构造数组。

提到数组似乎意味着 Python 风格的列表推导可以用 Julia 数组来完成。

下一个标题是生成器表达式

理解也可以不用封闭的方括号来编写,从而产生一个称为生成器的对象。

这听起来很像 Python 风格的生成器。

Julia 的开发人员是否认为 Julia 的数组(1-dim)本质上等同于 Python 列表?

标签: pythonjulia

解决方案


TL;DR:是的,但更快。

@StefanKarpinski,Julia 的联合创始人,在这里发表了以下评论

另一个区别是您在 Python 中使用了一个集合,在 Julia 中使用了一个数组(Python 称之为“列表”)

所以根据 Stefan 的说法,“数组”(可能意味着一维数组)是“Python 称之为‘列表’的东西”</p>

举个简单的例子,假设我们要求P1000 万个比率的乘积 ,R其中每一项的分子是4n^2,每一项的分母比分子 小一R = num/(num - 1),其中n= 1 到 1000 万。

在 Julia 1.0.0 中,无需尝试进行任何类型的优化,这是 Python 风格的列表推导:

julia> P = prod([4n^2/(4n^2 - 1) for n in 1:10_000_000])
1.5707962875230395

在 Julia 1.0.0 REPL 中运行它非常快,在我的笔记本电脑上基本上是瞬时的。这不是基准测试,但运行类似的代码,针对 Python 进行了修改,在 PyCharm 的 REPL 中使用 Python 3.6 时速度明显较慢。

import numpy as np
P = np.prod([4*n**2/(4*n**2 - 1) for n in range(1, 10_000_001)])  
P
1.5707962875404267

仅凭视觉猜测速度,Julia 对这个列表理解的速度要快 10 倍以上。

Julia 中的生成器怎么样?

prod只需删除函数调用内的方括号:

julia> P = prod(4n^2/(4n^2 - 1) for n in 1:10_000_000)
1.5707962875404267

朱莉娅的答案在我的笔记本电脑上是即时的。

这不是 Python 和 Julia 之间的速度比较,所以我将在这一点上离开 Python。

Julia 的2nfor2 * n是一个不错的功能。例如,尝试2P

julia> 2P
3.1415925750808533

这里


推荐阅读