美文网首页
列表与切片

列表与切片

作者: 不倒翁4 | 来源:发表于2020-11-02 12:22 被阅读0次

    列表

    特点:有序,长度可变,且包含的内容均可修改的序列,即支持增删改查

    列表的创建:

    创建列表可以采用如下几种方式:
    (1)使用方括号:lst = [1,2,4,True, None]
    (2)使用元组来创建:list(tuple)
    (3)使用迭代器/生成器:list(range(10)), range(0,10,3)
    (3.1.) 列表生成器range,前开后闭,生成的都是整数,range虽然不是一个列表,但是它能像列表一样被索引

    lst1 = [1,2,4,True, None]
    tup = (8, 9 , 13, 'hello')
    lst2 = list(tup)
    ran = range(1, 10)
    lst3 = list(ran)
    print(lst1, type(lst1))
    print(lst2, type(lst2))
    print(ran, type(ran))
    print(lst3, type(lst3))
    -----------------------------------
    [1, 2, 4, True, None] <class 'list'>
    [8, 9, 13, 'hello'] <class 'list'>
    range(1, 10) <class 'range'>
    [1, 2, 3, 4, 5, 6, 7, 8, 9] <class 'list'>
    

    增删元素

    列表是有序可变的序列,那么它必然会支持增删改查:
    (1)增

    • 使用+进行列表的连接,此时会产生一个新的列表,不会改变原始列表
    list+[1,2,3]:生成一个新的list,不会改变lst
    
    lst1 = list(range(9))
    print(lst1)
    lst2 = lst1 + [99, 88, 77]
    print(lst1)
    print(lst2)
    --------------------------------------
    [0, 1, 2, 3, 4, 5, 6, 7, 8]
    [0, 1, 2, 3, 4, 5, 6, 7, 8]
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 99, 88, 77]
    
    • 使用list.append(value/list)方法,在列表的末尾进行插入,此时会在原始列表的末尾进行元素的添加

    list.append(element/lst)

    lst1 = list(range(9))
    print(lst1)
    lst1.append([99, 88, 77])
    print(lst1)
    ---------------------------------
    [0, 1, 2, 3, 4, 5, 6, 7, 8]
    [0, 1, 2, 3, 4, 5, 6, 7, 8, [99, 88, 77]]
    
    • 使用list.extend(list)方法,在列表中同时添加多个元素,该方法与上述append方法的主要区别在于,append会在原始列表末尾直接插入一个新添的列表,而extend是直接在末尾添加多个元素,该方法与“+”的区别在于不会产生新的列表,直接在原始列表上进行修改。

    list.extend([1,23,4])

    lst1 = list(range(9))
    print(lst1)
    lst1.extend([99, 88, 77])
    print(lst1)
    ---------------------------------
    [0, 1, 2, 3, 4, 5, 6, 7, 8]
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 99, 88, 77]
    
    • 使用list.insert(index, value)在对应的位置index上插入对应的值value

    list.insert(3, 'world'):在index为3的位置插入'world'

    lst = [5,9, 3, 'hello']
    print(lst)
    lst.insert(3, 'world')
    print(lst)
    ---------------------------
    [5, 9, 3, 'hello']
    [5, 9, 3, 'world', 'hello']
    

    (2)删

    • list.pop(index):将特定位置index的元素移除
    lst = list(range(7))
    print(lst)
    print(lst.pop())
    print(lst)
    ------------------------
    [0, 1, 2, 3, 4, 5, 6]
    6
    [0, 1, 2, 3, 4, 5]
    
    • list.remove(value):定位第一个符合要求的值/value并移除
    lst = [55, 88, 4, 4, 'red', 'yellow', 'red']
    print(lst)
    print(lst.remove('red'))
    print(lst)
    ---------------------------------
    [55, 88, 4, 4, 'red', 'yellow', 'red']
    None
    [55, 88, 4, 4, 'yellow', 'red']
    
    • list.clear():清除所有的元素
    lst = [55, 88, 4, 4, 'red', 'yellow', 'red']
    print(lst)
    print(lst.clear())
    print(lst)
    ----------------------------------------
    [55, 88, 4, 4, 'red', 'yellow', 'red']
    None
    []
    
    • del list[0]:del是一个语句,删除了第一个元素; del lst[:4]
    lst = [55, 88, 4, 4, 'red', 'yellow', 'red']
    print(lst)
    del lst[:4]
    print(lst)
    -------------------------------------
    [55, 88, 4, 4, 'red', 'yellow', 'red']
    ['red', 'yellow', 'red']
    

    (3)改查
    列表的修改比较简单,通过索引的方式直接修改列表中对应的元素

    lst = [55, 88, 4, 4, 'red', 'yellow', 'red']
    print(lst)
    lst[4] = 'black'
    print(lst)
    --------------------------------------
    [55, 88, 4, 4, 'red', 'yellow', 'red']
    [55, 88, 4, 4, 'black', 'yellow', 'red']
    
    lst = [55, 88, 4, 4, 'red', 'yellow', 'red']
    print(lst[3:])
    -------------------------------
    [4, 'red', 'yellow', 'red']
    

    列表连接和联合

    列表的连接与联合主要有如下两种方式:
    (1)+连接:两个列表直接用+进行连接
    (2)lst1.extend(lst2):extend方法向该列表中添加多个元素
    由于在列表的这个部分已经介绍过这两种方式的使用,此处不再详赘述,这里主要提出一个值得关注的点:
    使用+添加内容来连接列表代价比较高,过程中创建了新列表,并且还要复制对象。通常使用extend将元素添加到已经存在的列表是更好的一种方式。

    成员运算

    可以使用in, not in检查某个值是否在/不在列表中,返回值为布尔型。
    (1)in:检查一个值是否在列表中
    (2)not in:判断元素不在列表中
    与字典和集合相比,检查列表中是否包含一个值是非常缓慢的,因为python在检查时

    • 列表:会进行线性逐个扫描
    • 字典与集合:同时检查所有元素,基于哈希表**
    lst = [55, 88, 4, 4, 'red', 'yellow', 'red']
    print('red' in lst)
    print('yellow' not in lst)
    -------------------------------
    True
    False
    

    列表的函数与方法

    (1)函数:列表的函数有很多,此处不详细展开,需要使用的时候可以直接百度搜

    len(lst)
    max(lst)
    min(lst)
    sum(lst)
    

    (2)方法

    • list.index(element):返回元素对应的index,注意它返回的是查到的第一个元素的index
    • list.count(element):计算元素出现的个数
    lst = [55, 88, 4, 4, 'red', 'yellow', 'red']
    print(lst.index('red')) >>> 4
    print(lst.count('red')) >>> 2
    
    • list.sort():对列表的元素进行排序
    a = [88,11,4,56,100]
    a.sort()
    print(a)
    b = ['saw', 'small','foxes']
    b.sort(key=len)
    print(b)
    ----------------------------------------
    [4, 11, 56, 88, 100]
    ['saw', 'small', 'foxes']
    

    列表的排序

    上述提及列表的排序方法,此处我们介绍列表常用的几种排序方式:
    (1)list.sort()方法:列表内部进行排序,无需创建新对象
    (2)sorted(list)函数:对通用序列产生一个排序后的拷贝,排序并复制的一个函数

    lst = ['foo', 'red', 'yellow', 'black']
    sorted(lst, key = len, reverse=True)
    ----------------------------------------------
    ['yellow', 'black', 'foo', 'red']
    

    (3)bisect:内建的bisect模块实现了二分搜索和已排序列表的插值,但是bisect不会检查列表是否已经排序,因为这样代价太大
    bisect.bisect(lst, 2):找到元素应当被插入的位置
    bisect.insort(lst,6):将元素插入到相应位置

    import bisect
    lst = ['foo', 'red', 'yellow', 'black']
    print(bisect.bisect(lst, 'yellow'))
    print(lst)
    print(bisect.insort(lst, 'black'))
    print(lst)
    ----------------------------------------
    4
    ['foo', 'red', 'yellow', 'black']
    None
    ['black', 'foo', 'red', 'yellow', 'black']
    

    列表的复制

    这里介绍列表一个非常重要的用法,在python中会存在列表的赋值,但是赋值之后,如果修改其中一个列表的元素, 势必也会更给另一个列表中的元素,这是因为赋值意味着两个列表的引用是一样的,这个跟python内部序列的存储有关。例如:

    x = list(range(5))
    m = x
    x[2] = 101
    

    此时会发现m[2]对应的值也会发生改变,这就是需要复制的原因。

    • list.copy():复制一个新的列表,此时list与复制出来的list指向两个新的列表(虽然两个列表的值相同)
    lst_old = ['foo', 'red', 'yellow', 'black']
    lst_new = lst.copy()
    print(lst_old)
    print(lst_new)
    lst_old[0] = 'foolish'
    print(lst_old)
    print(lst_new)
    -----------------------------------------
    ['foo', 'red', 'yellow', 'black']
    ['foo', 'red', 'yellow', 'black']
    ['foolish', 'red', 'yellow', 'black']
    ['foo', 'red', 'yellow', 'black']
    

    切片

    切片创建:

    • 使用列表来创建切片:注意切片的索引是左闭右开
    list[3:5]
    

    切片赋值

    seq[3:4] = [66,77]
    

    切片取值

    seq[:-1]
    seq[-4:]
    seq[:]
    seq[::2]:表示每隔2个数取一个值,其中2为步长
    

    对列表或者元组进行翻转/逆序排列

    对元组或者列表进行逆序排列可以采用如下两种方式:
    (1)lst[::-1]

    lst = ['foo', 'red', 'yellow', 'black']
    print(lst)
    lst[::-1]
    --------------------------
    ['foo', 'red', 'yellow', 'black']
    ['black', 'yellow', 'red', 'foo']
    

    (2)reversed(list)函数,但是此时返回的是一个迭代器,我们需要再使用list()函数将其转换成列表

    lst = ['foo', 'red', 'yellow', 'black']
    print(lst)
    print(reversed(lst), type(reversed(lst)))
    list(reversed(lst))
    -----------------------------------------------
    ['foo', 'red', 'yellow', 'black']
    <list_reverseiterator object at 0x0000022B0DFE5D48> <class 'list_reverseiterator'>
    ['black', 'yellow', 'red', 'foo']
    

    相关文章

      网友评论

          本文标题:列表与切片

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