python3基础03列表(list)和元组(tuple)

作者: pythonic生物人 | 来源:发表于2020-07-22 23:57 被阅读0次

    本文详细梳理python序列容器中的列表和元组数据结构的使用。
    首发于本人公众号:pythonic生物人

    更好的阅读体验请戳:

    python3基础03列表(list)和元组(tuple)

    目录

    1、列表(list)
    列表特点
    列表创建
    列表操作
        相加(+)
        相乘(*)
        索引(index)
        切片
        列表元素修改
        成员资格
        列表推导式
    列表方法
        append
        clear
        copy
        count
        extend
        index
        inseret
        pop
        remove
        reverse
        reversed函数
        sort
        sorted函数
    
    2、元组(tuple)
    元组特点
    元组创建
    元组操作
    元组方法
    

    先简单说一下python容器和变量两个概念。python容器容器(container)是python支持的一种数据结构基本概念,是可包含其他对象的对象(python中一切皆为对象,例如,我正在写的博文,使用的python,键盘等);容器都包含了一个__contains__ 方法(dir函数可查看);三种主要的python容器:

    • 序列,如列表,元组和字符串,在序列中,每个元素都有编号;
    • 映射,如字典,在映射中,每个元素都有名称,也叫键;
    • 集合(set)。

    python变量(variable)表示(或指向)特定值的名称;变量名称只能由字母、数字和下划线(_)构成,开头不能为数字;变量赋值及使用,如下。

    In [2]: x=3#变量x赋值
    In [3]: print(x)#表达式中使用变量
    3
    

    1、列表(list)

    • 列表特点

    1. 使用中括号包围;
    2. 列表中可以存放任意类型和任意个数的元素(字符串,数字,列表,字典等等);
    3. 列表是一种序列容器,具有序列序列通用的方法和函数。
    • 列表创建

    In [5]: ["a","b","c",1]#使用[]创建
    Out[5]: ['a', 'b', 'c', 1]
    
    IIn [7]: list("124")#使用list函数创建
    Out[7]: ['1', '2', '4']
    
    In [8]: [i for i in "Hello" ]#列表推导式创建
    Out[8]: ['H', 'e', 'l', 'l', 'o']
    
    • 列表操作

    相加(+),相乘(*),

    相加(+)

    In [9]: ['1', '2', '4'] + ['H', 'e', 'l', 'l', 'o']
    Out[9]: ['1', '2', '4', 'H', 'e', 'l', 'l', 'o']
    

    相乘(*)

    In [11]: ['1', '2', '4'] * 2
    Out[11]: ['1', '2', '4', '1', '2', '4']
    

    索引(index)

    In [13]: alist = ['1', '2', '4', ['a', 'b']]
    In [14]: alist
    Out[14]: ['1', '2', '4', ['a', 'b']]
    
    In [15]: alist[0]
    Out[15]: '1'
    
    In [16]: alist[-1]
    Out[16]: ['a', 'b']
    
    In [17]: alist[-1][0]#嵌套列表索引
    Out[17]: 'a'
    

    切片

    类似上一节字符串切片操作,略。

    列表元素修改

    列表中元素可修改,可通过索引或者切片修改。

    In [18]: alist[-1] = ['c', 'a']#索引修改
    In [19]: alist
    Out[19]: ['1', '2', '4', ['c', 'a']]
    
    In [31]: alist[1:3] = []#切片修改
    In [32]: alist
    Out[32]: ['1', ['c', 'a']]
    

    成员资格

    判断某个元素是否存在列表中,存在返回True,否则返回False。

    In [210]: a
    Out[210]: ['a111', 'a1', 'a']
    
    In [211]: "a" in a
    Out[211]: True
    
    In [212]: "a2" in a
    Out[212]: False
    

    列表推导式

    此处简要介绍,后续详细介绍。

    In [210]: a
    Out[210]: ['a111', 'a1', 'a']
    
    In [213]: [i[0] for i in a]
    Out[213]: ['a', 'a', 'a']
    
    • 列表方法

    dir函数列出列表所有函数和方法(未加__部分)。

    In [36]: print(dir(list))
    

    ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

    append

    列表末尾添加一个元素。

    In [2]: alist = ['1', '2', '4', ['c', 'a']]
    In [3]: alist.append("hah")
    
    In [4]: alist
    Out[4]: ['1', '2', '4', ['c', 'a'], 'hah']
    

    clear

    将列表中元素清空。

    In [4]: alist
    Out[4]: ['1', '2', '4', ['c', 'a'], 'hah']
    
    In [6]: alist.clear()
    In [7]: alist
    Out[7]: []
    

    copy

    复制列表,得到一个副本,等价于list[:],list(list)。

    In [130]: a = [1,2,3]
    In [131]: b = a.copy()
    In [132]: b
    Out[132]: [1, 2, 3]
    
    In [133]: b[0] = "hah"#修改b列表
    In [134]: b
    Out[134]: ['hah', 2, 3]
    
    In [135]: a#b列表修改不会影响a列表
    Out[135]: [1, 2, 3]
    

    count

    计算某个元素在列表中出现了多少次。

    In [138]: a
    Out[138]: [1, 2, 3]
    
    In [139]: a.count(1)#1在a中出现1次
    Out[139]: 1
    
    In [140]: a.count(4)#4不在a中返回0次
    Out[140]: 0
    

    extend

    使用一个列表扩展另外一个列表,此处要区别于前面提到的列表相加(效率和可读性不及extend)。

    #列表相加
    In [145]: a = [1, 2, 3]
    In [146]: a + b
    Out[146]: [1, 2, 3, 4, 5, 6]
    
    In [147]: a#列表相加未修改a列表
    Out[147]: [1, 2, 3]
    
    #extend
    In [141]: a
    Out[141]: [1, 2, 3]
    
    In [142]: b = [4, 5, 6]
    In [143]: a.extend(b)
    In [144]: a#extend修改了a列表
    Out[144]: [1, 2, 3, 4, 5, 6]
    

    index

    查找某个元素第一次出现在列表中的索引号。

    In [150]: a = [1, 2, 3, 3]
    In [151]: a.index(1)
    Out[151]: 0
    
    In [152]: a.index(3)#返回3第一次出现的索引2
    Out[152]: 2
    

    inseret

    在列表指定位置添加某个新元素,此处要区别于上文的切片或者索引修改列表的方法(方法效率和可读性不及insert)。

    #切片或者索引修改法
    In [160]: a = [1, 2, 3, 3]
    In [161]: a[1:1] = ["haha"]
    In [162]: a
    Out[162]: [1, 'haha', 2, 3, 3]#insert方法
    
    In [153]: a
    Out[153]: [1, 2, 3, 3]
    
    In [154]: a.insert(1, "haha")
    In [155]: a
    Out[155]: [1, 'haha', 2, 3, 3]
    

    pop

    从列表中删除一个元素,默认删除最后一个元素,可指定索引号删除对应元素,并返回这一元素。pop是唯一既修改列表又返回一个非None值的列表方法。

    In [163]: a
    Out[163]: [1, 'haha', 2, 3, 3]
    
    In [164]: a.pop()
    Out[164]: 3
    
    In [165]: a
    Out[165]: [1, 'haha', 2, 3]
    
    In [167]: a.pop(1)#删除索引为1的元素,并返回
    Out[167]: 'haha'
    
    In [168]: a
    Out[168]: [1, 2, 3]
    

    remove

    删除列表中第一次出现的元素。

    In [170]: a = [1, 2, 3, 3]
    In [171]: a.remove(3)
    
    In [172]: a
    Out[172]: [1, 2, 3]
    
    In [173]: a.remove(4)#元素不存在是,报错并退出执行
    ---------------------------------------------------------------------------
    ValueError Traceback (most recent call last)
    <ipython-input-173-181f025cbb19> in <module>
    ----> 1 a.remove(4)
    
    ValueError: list.remove(x): x not in list
    

    reverse

    将列表中元素顺序颠倒。

    In [183]: a
    Out[183]: [2, 1]
    
    In [184]: a.reverse()
    In [185]: a
    Out[185]: [1, 2]
    

    reversed函数

    该函数可以达到reverse相同的目的。

    In [186]: reversed(a)#返回一个迭代器
    Out[186]: <list_reverseiterator at 0x601cdd8>
    
    In [187]: list(reversed(a))
    Out[187]: [2, 1]
    

    sort

    对列表就地排序(默认低到高排序,即升序),而不是返回排序后的列表的副本。

    In [191]: a = [1, 3, 5, 3, 0]
    In [192]: a.sort()
    In [193]: a#就地修改了
    Out[193]: [0, 1, 3, 3, 5]
    
    In [194]: b = a.sort()#不是返回排序后的a列表的副本,所以b为None
    In [195]: b
    
    #sort的key和reverse参数
    #key后的函数自己可以自定义,即自己可以设定排序规则。key默认为None。
    In [204]: a = ["a111", "a1", "a"]
    In [207]: a.sort(key=len, reverse=True)#len按元素长度排序,reverse=True指定按从大到小排序
    In [208]: a
    Out[208]: ['a111', 'a1', 'a']
    

    sorted函数

    返回被列表排序后的一个副本,默认从低到高排序,要区别于sort方法。

    In [199]: a = [1, 3, 5, 3, 0]
    In [200]: b = sorted(a)
    In [201]: b
    Out[201]: [0, 1, 3, 3, 5]
    
    In [202]: a
    Out[202]: [1, 3, 5, 3, 0]
    

    2、元组(tuple)

    • 元组特点

    1. 使用小括号()包围;
    2. 元组和列表一样也是序列容器,具有序列的通用操作;
    3. 元组和列表最大的区别是不可修改(和前面介绍的字符串一样不能修改),所以元组不具有列表的大量方法。
    • 元组创建

    In [225]: (1, 2, 3, 4)#小括号()包围一串数字
    Out[225]: (1, 2, 3, 4)
    
    In [227]: tuple([1, 2, 3, 4])#使用tuple函数
    Out[227]: (1, 2, 3, 4)
    
    In [228]: tuple("1234")
    Out[228]: ('1', '2', '3', '4')
    
    • 元组操作

    1. 不能修改元组;
    2. 可以切片,索引,相加等操作元组,可参考列表操作。
    • 元组方法

    由于元组不可修改,元组方法和列表有很大区别,如下。有count和index方法,用法类似列表中方法。

    In [222]: print(dir(list))#列表的内置函数和方法
    

    ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

    In [219]: print(dir(tuple))#元组的内置函数和方法
    

    ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']


    欢迎关注公众号:

    干货,真香

    相关文章

      网友评论

        本文标题:python3基础03列表(list)和元组(tuple)

        本文链接:https://www.haomeiwen.com/subject/cuudkktx.html