• [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的压制性力量,怎么办。。。。。。


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

     
  • 相关阅读:
    关于开源的RTP——jrtplib的使用
    常见hash算法的原理
    cocos2dx触屏响应(单点触摸)CCTouchBegan,CCTouchMove,CCTouchEnd
    SD卡中FAT32文件格式高速入门(图文具体介绍)
    HDU 4916 树形dp
    图像识别技术
    shell语法简单介绍
    MATLAB新手教程
    java堆栈 (转)
    给字符数组赋值的方法
  • 原文地址:https://www.cnblogs.com/zhongwencool/p/python_list.html
Copyright © 2020-2023  润新知