数据结构是通过某种方式组织在一起的数据元素的集合,这些数据元素可以是数字,字符,甚至可以是其他的数据结构。
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的压制性力量,怎么办。。。。。。


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

 

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

  1. Python—列表元组和字典

    Python-列表元组和字典 列表 元组 字典 列表: 列表是Python中的一种数据结构,他可以存储不同类型的数据.尽量存储同一种类型 列表索引是从0开始的,我们可以通过索引来访问列表的值. 列表的 ...

  2. python列表元组

    python列表元组 索引 切片 追加 删除 长度 循环 包含   定义一个列表 my_list = []     my_list = list()   my_list = ['Michael', ' ...

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

    列表 元组 字典 集合的区别是python面试中最常见的一个问题.这个问题虽然很基础,但确实能反映出面试者的基础水平. (1)列表 什么是列表呢?我觉得列表就是我们日常生活中经常见到的清单.比如,统计 ...

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

    先看图片解释 (1)列表 什么是列表呢?我觉得列表就是我们日常生活中经常见到的清单.比如,统计过去一周我们买过的东西,把这些东西列出来,就是清单.由于我们买一种东西可能不止一次,所以清单中是允许有重复 ...

  5. 【277】◀▶ Python 列表/元组/字典说明

    目录: 前言 一.访问列表中的值 二.更新列表 三.删除列表元素 四.Python 列表脚本操作符 五.Python 列表函数 & 方法 参考:Python 列表(List)使用说明 列表截取 ...

  6. Python 列表/元组/字典总结

    序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. Python有6个序列的内置类型,但最常见的是列表和元组. 序列 ...

  7. python3笔记十八:python列表元组字典集合文件操作

    一:学习内容 列表元组字典集合文件操作 二:列表元组字典集合文件操作 代码: import pickle  #数据持久性模块 #封装的方法def OptionData(data,path):    # ...

  8. Python列表,元组,字典,集合详细操作

    菜鸟学Python第五天 数据类型常用操作及内置方法 列表(list) ======================================基本使用====================== ...

  9. Python 列表,元组,字典

    0)字符串切片 py_str = 'python' >>>py_str[0] #取第一个字符串,返回值为"p",超出范围会报错 >>>py_st ...

随机推荐

  1. 学习笔记之Tips for Macbook

    写给Mac新手的入门指南 - 威锋网 https://mp.weixin.qq.com/s/pqmqGZhNwevx57KeLnzZmg https://bbs.feng.com/read-htm-t ...

  2. Microsoft SQL Server on Linux破解 2G内存限制

    首先,贴上微软官方安装方法,大家按照官方的操作就行. 微软官方安装方法 相信很多同学遇到一个问题就是: sqlservr: This program requires a machine with a ...

  3. 5月24日上课笔记-js操作DOM

    解析properpties配置文件 类加载器 ResourceBundle 一.jquery操作DOM 1.jquery操作css css("",""); cs ...

  4. pm无力的话

    1. 先这样做吧, 等不行再改 2. 用户的需求不明确, 他们对于自己的业务也不明白, 现在是我们在帮助他们缕清自己的业务, 这个迭代的过程中,有很多问题,我们程序员既不能参与到业务, 也不能猜测业务 ...

  5. Thymeleaf系列五 迭代,if,switch语法

      1. 概述 这里介绍thymeleaf的编程语法,本节主要包括如下内容 迭代语法:th:each; iteration status 条件语法:th:if; th:unless switch语法: ...

  6. 33_java之类加载器和反射

    01类加载器 * A.类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. * a 加载 * 就是指将class文件读入内存,并为之 ...

  7. python manage.py runserver 0.0.0.0:8000

    python manage.py runserver 这种命令行,可以在服务器端输入IP:8000直接访问 在 python manage.py runserver 127.0.01:8000 在服务 ...

  8. leetcode917

    class Solution { public: string reverseOnlyLetters(string S) { int len = S.length(); queue<char&g ...

  9. MyEclipse编译报:javaScript Validator错误

    转自:https://blog.csdn.net/lkpmemory/article/details/8833329 Myeclipse编译报错如下: Errors occurred during t ...

  10. 少走弯路,给Java 1~5 年程序员的建议

    参考:https://www.jianshu.com/p/5681a1f0aad6 今天LZ是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每个阶段要学习的内容甚至是一些书籍.这一部分的内 ...