本帖最后由 codegay 于 2016-3-16 10:37 编辑
julia与python中的列表解析.jl- #=julia与python中的列表解析.jl
- 2016年3月16日 07:30:47 codegay
-
- julia是一门很年轻的科学计算语言
- julia文档 https://julia-zh-cn.readthedocs.org/zh_CN/latest/
- 初学python几个月,初学julia才几天,理解与认识不到位,
- 如发现有误的地方,请指出,谢谢。
- =#
-
- #=
- 在python使用列表解析,感觉比较方便:
- [r for r in range(10)]
-
- 可以使用if 过滤元素:
- [r for r in range(10) if r%2==0]
-
- 支持else,但是需要写成这样:
- [r if r%2==0 else r**2 for r in range(10)]
-
- 我再次看到这篇文章:http://www.swmemo.com/551.html
- 发现python的列表解析居然还能写成这样,我一脸精呆:
- [ a**2 if a<20 else a*2 for a in range(30) if len(str(a))>1]
-
- =#
-
- #以下julia这几种写法其结果等效的,都是生成1到10的数组:
- #交互模式中可以使用[1:10],在程序中这样写运行后会有提示。
- d2=[r for r=1:10]
- println(d2)
- d3=[r for r in 1:10]
- println(d3)
-
- #julia的列表解析也可以调用函数
- [run(`cmd /c echo 今天周"$r"了`) for r=1:5]
-
- #但是到目前版本0.4.3还不支持类似python的if 条件判断
- #可以使用filter()和filter!()进行过滤
- #以下例子是读取D盘的目录,过滤排除掉f中的目录
- d=readdir("d:/")
- f=["快盘","AV","\$RECYCLE.BIN","temp","System Volume Information"]
- #$是特殊字符,需要加\转义
-
- #使用filter过滤排除目录
- for r in f
- d=filter(x -> x!=r,d)
- end
- #以上正常的写法,以下是列表解析的写法.列表解析中可以调用函数对不对?即学即用可以改成如下代码:
- [filter!(x->x!=r,d) for r in f]
-
- #参考手册中的 . 按位操作符,还有以下这样的写法:
- d=d[d.!="快盘"]
- #依此类推吧...
- d=d[d.!="AV"]
-
- #经过测试,与python不同,julia中的列表解析支持符值语句,所以列表解析可以写成像下面这样
- [d=d[d.!=r] for r in f] #与[filter!(x->x!=r,d) for r in f]结果等效
复制代码
|