设为首页 收藏本站
查看: 1310|回复: 0

[经验分享] [python01] python列表,元组对比Erlang的区别总结

[复制链接]

尚未签到

发表于 2015-4-20 10:32:07 | 显示全部楼层 |阅读模式
数据结构是通过某种方式组织在一起的数据元素的集合,这些数据元素可以是数字,字符,甚至可以是其他的数据结构。

python最基本的数据结构是sequence(序列):6种内建的序列:列表,元组,字符串,Unicode字符串,buffer对象和xrange对象。



对比归纳:列表,元组在Erlang与python中的区别:





1. 通用操作:

Python的列表更像是C中的数组,但是比那更灵活,和Erlang的列表大有不同。

1.1 python列表索引从0开始并可以是负数。可以使用




>>>num=[0,1,2,3,4]
>>>num[1]
1
>>>num[-1]
4

Erlang只能的大部分操作都要使用lists里面的函数来进行,且索引是从1开始,且不能为负数




>Num=[0,1,2,3,4].
>lists:nth(Num,2).

  1.2 python可以分片:使用索引可以访问单个元素,使用分片可以访问一定范围内的元素:





>>>tag='google web site'
>>> tag[9:30]
'http://www.google.com'
>>> tag[32:-4]
'google web site'

分片操作需要提供两个索引作为边界,第一个索引的元素什么包含在分片内中,第二个索引元素不包含在分片中。

想取最后几个元素还可以更简洁一些:




>>> tag[-20:-4]
'>google web site'

    1.2.1 还可以设置步长:(步长默认为1)




>>> num
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> num[0:11:2]
[0, 2, 4, 6, 8, 10]

    1.2.2 取得列表中所有元素的方法:3个元素都不填




>>> num[:]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Erlang并没有直接的函数来进行分片(取得子列表):也没有步长的概念。



1.3  python可以序列相加:

1.3.1 直接使用+,这不支改变原列表的值。




>>> num+[1,2,3]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3]

1.3.2可以使用expand函数,此函数不会返回最新的列表,只会修改原列表的值。




>>> num.extend([1,2,3])
>>> num
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3]

Erlang类似操作:

使用++或lists:append/2




> [1,2,3]++[4,5,6].
[1,2,3,4,5,6]
> lists:append([1,2,3],[4,5,6]).
[1,2,3,4,5,6]

1.4 python可以使用*n 来生成多一们新的序列,并在新序列中,原来的序列会被重复n次




>>> [1]*4
[1, 1, 1, 1]

  空列表可以使用[]来表示,


None是python的一个内建值,代表空值,意味着里面没有放置任何元素,如果你想初始化一个长度为10的列表,可以:




>>> [None]*10
[None, None, None, None, None, None, None, None, None, None]

Erlang中*只是一个普通的数学运算符




> lists:duplicate(4,1).
[1,1,1,1]

Erlang空列表也是用[]来表示,但并没有类似于None的变量存在(因为它不需要)



1.5 python为检查一个值是否在序列中,可以使用in运算符

in检查某个条件是不是为真,如果真返回True,假就返回False,这叫布尔运算符




>>> num
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3]
>>> 1 in num
True
>>> 100 in num
False
>>> [1,2] in num
False
>>> "aaa" in "aaatest"
True

可以看出python中的列表和字符串不是同一种类型,但可以通过list函数把字符串转化为列表




>>> list("test")
['t', 'e', 's', 't']
>>> list("test")=="test"
False

Erlang中字符串也是一种列表,且没有布尔运算符,且true,false本质只是一个普通的原子,可以使用lists函数判断真假




> lists:member(21,[21,2,3,41,1]).
true
> lists:member(22,[21,2,3,41,1]).
false
  


1.6 python的len,max,min对应Erlang的length,max,min,都非常有用





2. 列表操作:

因为Elrang的变量不可变化,大部分常用操作都封装在lists模块中。

而python变量可变,故有一些基本的内建操作:

2.1 改变列表,元素赋值:




>>> num
[1, 2, 3]
>>> num[2]=100
>>> num
[1, 2, 100]

不能为一个位置不存在的元素赋值:




>>> num[100]
Traceback (most recent call last):
File "", line 1, in
IndexError: list index out of range

2.2 删除元素:




>>> num
[1, 2, 100]
>>> del num[2]
>>> num
[1, 2]
>>> del num[10]
Traceback (most recent call last):
File "", line 1, in
IndexError: list assignment index out of range

2.3 分片赋值:这是个非常强大的功能




>>> name=list("test")
>>> name
['t', 'e', 's', 't']
>>> name[2:]=['c','h']
>>> name
['t', 'e', 'c', 'h']
>>> name[2:]=['c','h','e','r']
>>> name
['t', 'e', 'c', 'h', 'e', 'r']

如果把索引都填一样的值,就变成了插入:




>>> name[1:1]=['t','e','s','t']
>>> name
['t', 't', 'e', 's', 't', 'e', 'c', 'h', 'e', 'r']

还可以变成删除哦:




>>> name[1:4]=[]
>>> name
['t', 't', 'e', 'c', 'h', 'e', 'r']
>>> name[1:4]=[]
>>> name
['t', 'h', 'e', 'r']

列表方法:python的调用方式是 :

对象.方法(参数)



列表中几个常用的基本方法有:


append在列表尾追加新的对象
count统计某个元素在列表中出现的次数
extend可以在列表尾一次性追加另一个序列的多个值
index从列表中找出某一个值第一匹配项的索引位置
insert用于将对象插入到列表中
pop移除列表中的一个元素(默认为最后一个)并返回该元素的值:它是唯一一个既能修改列表又返回元素值(其它的都是None)的列表方法
remove移除列表中某个值的第一个匹配项
reverse把列表中的元素反向存放
sort排序,可以自定义排序函数








相比而言:python的元组和erlang的元组更像,但略有不同:



python的元组与列表唯一的不同就是:元组不可修改。

基本语法:




>>> 1,2,3
(1, 2, 3)

构建一个元素的元组


>>> (1,)
(1,)
>>> (1)
1

与list函数对应可以使用tuple函数来把列表转化为元组:




>>> tuple([1,2,3])
(1, 2, 3)
  整理过程中感觉到一股强烈的高级语言对Erlang的压制性力量,怎么办。。。。。。



小美眉察觉到自己的眉毛能自由动,乐开花了! DSC0000.gif

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-58710-1-1.html 上篇帖子: 身份证号码自动生成程序(Python) 下篇帖子: python下编译py成pyc和pyo
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表