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


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

     
  • 相关阅读:
    用 ArcMap 发布 ArcGIS Server FeatureServer Feature Access 服务 PostgreSQL 版本
    ArcMap 发布 ArcGIS Server OGC(WMSServer,MapServer)服务
    ArcScene 创建三维模型数据
    ArcMap 导入自定义样式Symbols
    ArcMap 导入 CGCS2000 线段数据
    ArcMap 导入 CGCS2000 点坐标数据
    ArcGis Server manager 忘记用户名和密码
    The view or its master was not found or no view engine supports the searched locations
    python小记(3)操作文件
    pytest(2) pytest与unittest的区别
  • 原文地址:https://www.cnblogs.com/zhongwencool/p/python_list.html
Copyright © 2020-2023  润新知