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

数据结构是通过某种方式组织在一起的数据元素的集合,这些数据元素可以是数字,字符,甚至可以是其他的数据结构。

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=‘<a href="http://www.google.com">google web site</a>‘
>>> 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 "<stdin>", line 1, in <module>
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 "<stdin>", line 1, in <module>
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的压制性力量,怎么办。。。。。。



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

时间: 2024-10-10 09:15:58

[python01] python列表,元组对比Erlang的区别总结的相关文章

python中列表 元组 字典 集合的区别

列表 元组 字典 集合的区别是python面试中最常见的一个问题.这个问题虽然很基础,但确实能反映出面试者的基础水平. (1)列表 什么是列表呢?我觉得列表就是我们日常生活中经常见到的清单.比如,统计过去一周我们买过的东西,把这些东西列出来,就是清单.由于我们买一种东西可能不止一次,所以清单中是允许有重复项的.如果我们扩大清单的范围,统计我们过去一周所有的花费情况,那么这也是一个清单,但这个清单里会有类别不同的项,比如我们买东西是一种花费,交水电费也是一种花费,这些项的类型是可以使不同的.pyt

Python列表 元组 字典 集合

元组 Python中的元组(Tuple)类似于Java中的数组,一旦创建了一个 tuple,就不能以任何方式改变它.这点与Python中的字符串类似,所以我们说元组和字符串都是不可变的序列.元组也支持索引和分片操作. 定义一个元组使用一对小(圆)括号” ( ) “. #定义一个元组 tuple1 = (1, 2, '3', 4, '5') # 定义了一个元组之后就无法再添加或修改元组中的元素 print tuple1[0] # 元组的元素都有确定的顺序.元组的索引也是以0为基点的 print t

Python成长笔记 - 基础篇 (三)python列表元组、字典、集合

本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码   一.列表和元组的操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 names = ["Wang","HouZi1","NiuNiu","ZhouYi","HouZi2",[1,2]] 可以通过列表角标的方式去获得list中的值 print(names)print(nam

python 列表 元组 字典

一.列表 一组有序项目的集合.可变的数据类型[可进行增删改查] 列表是以方括号“[]”包围的数据集合,不同成员以“,”分隔. 列表中可以包含任何数据类型,也可包含另一个列表 列表可通过序号访问其中成员 常用列表操作: list.append()追加成员,成员数据 list.pop()删除成员,删除第i个成员 list.count(x)计算列表中参数x出现的次数 list.remove()删除列表中的成员,直接删除成员i list.extend(L)向列表中追加另一个列表L list.revers

python列表元组

索引 切片 追加 删除 长度 循环 包含 定义一个列表 my_list = [] my_list = list() my_list = ['Michael', 'Bob', 'Tracy'] len(my_list) 获取元素个数 列表是一个可变的有序列表,所以通过索引定义元素位置 >>my_list[0]  第一个元素 'Michael' >>my_list[1]第二个元素 以此类推 'Bob' 如果取最后一个元素,除了计算索引位置,还可以用-1做索引,直接获取最后一个元素: &

也谈python列表append和extend的区别

关于append和extend两个方法,网上很多人说法如下: append() 方法向列表的尾部添加一个新的元素.只接受一个参数. extend()方法只接受一个列表作为参数,并将该参数的每个元素都添加到原有的列表中. 但是,关于extend只接受一个列表作为参数这种说法,深表怀疑.举个栗子: extend >>>a= [1,2,3,4] >>> a.extend(['a','b']) >>> a [1, 2, 3, 4, 'a', 'b'] appe

python列表元组集合字典

一.列表 1.列表格式 list1 = ['Google', 'Runoob', 1997, 2000]; list2 = [1, 2, 3, 4, 5 ]; 2.列表访问 list1[0]:Google list2[1:5]:[2,3,4,5] 3.l列表更新 list2[2]=新的值 del list[2] 删除第三个元素 4.列表操作符 len(list1)=list1长度 [1,2,3]+[4,5,6]=[1,2,3,4,5,6] ["hi"]*4=["hi"

python列表--浅拷贝与深拷贝的区别

首先得说说列表为什么需要拷贝,就是为了解决简单赋值操作,传地址的问题,因为赋值过去的列表,其实指向的是同一个地址,问题说明看代码 a = [1,2,3] b = a # list类型,简单赋值操作,是传地址 print(id(a)) print(id(b)) b[1] = 6 print(b) print(a) 执行结果,输出的是: 2460317409864 2460317409864 [1, 6, 3] [1, 6, 3] #同一地址,修改b的列表,a也会同时改变. 为了解决以上问题,lis

python 列表加法&quot;+&quot;和&quot;extend&quot;的区别

相同点 : "+"和"extend"都能将两个列表成员拼接到到一起 不同点 :   + : 生成的是一个新列表(id改变) extend : 是将一个列表的成员一个个取出添加到原列表中 , 改变的是原列表的值 , id不变 # "+" 实例: >>> a = [1,2] >>> b = [3,4] >>> id(a),id(b) (49934024, 50025160) >>>