美文网首页
基础·数据容器·列表&元组

基础·数据容器·列表&元组

作者: 三米板 | 来源:发表于2020-03-14 16:55 被阅读0次

    Python基础教程

    类型

    数据集合包括:列表,元组,字典

    列表=============================

    定义

    列表是以[]中括号包起来的一种数据集合,列表可以存储任何的数据类型。

    >>> a=[1,2,'liu',[1,2,3]]
    >>> print(a)
    [1, 2, 'liu', [1, 2, 3]]
    

    但凡能被for循环遍历的数据类型,均可传递list()转换为列表类型,list()将会像for一样遍历数据类型的每一个元素然后放到列表中

    >>> print(list('str'))  # 字符串
    ['s', 't', 'r']
    >>> print(list((1, 2, 3)))  # 元组
    [1, 2, 3]
    >>> print(list({1, 2, 3, 4}))  # 数组
    [1, 2, 3, 4]
    >>> print(list([1, 2, 3, 4]))  # 列表
    [1, 2, 3, 4]
    >>> print((list({'name': 'yyh', 'age': 18})))  # 字典
    ['age', 'name']
    >>> 
    

    长度

    计算长度和字符串长度一样

    >>> len(mylist)
    10
    

    查找

    支持索引值定位,且支持负数,负数为从右往左索引

    >>> mylist=[1,2,3,4,5,6]
    >>> print(mylist[3])
    4
    >>> print(mylist[-3])
    4
    

    切片
    通常一个切片操作要提供三个参数 [start_index: stop_index: step]

    start_index是切片的起始位置
    stop_index是切片的结束位置(不包括)
    step可以不提供,默认值是1,步长值不能为0,不然会报错ValueError。

    当 step 是正数时,以list[start_index]元素位置开始, step做为步长到list[stop_index]元素位置(不包括)为止,从左向右截取,start_index和stop_index不论是正数还是负数索引还是混用都可以,但是要保证 list[stop_index]元素的【逻辑】位置
    必须在list[start_index]元素的【逻辑】位置右边,否则取不出元素。

    有必要说三遍:
    取值不包含stop_index的元素!
    取值不包含stop_index的元素!
    取值不包含stop_index的元素!

    #start和stop都是正数
    >>> mylist=[0,1,2,3,4,5,6,7,8,9]
    >>> mylist[1:2]#从index=1开始取值,取到下标为2之前为止,注意不包括index=2
    [1]
    >>> mylist[0:2]#从index=0开始取值,取到下标为2之前为止,注意不包括index=2
    [0, 1]
    #start为正,stop为负,stop为负的时候,从右侧开始数,于是就能达到取中间数据的效果。(如效果:给一个List,把首尾的元素去除并打印:用 mylist[1,-1] 即可)
    >>> mylist[1:-1]
    [1, 2, 3, 4, 5, 6, 7, 8]
    >>> mylist[2:-2]
    [2, 3, 4, 5, 6, 7]
    >>> mylist[1:-1]
    [1, 2, 3, 4, 5, 6, 7, 8]
    #解释:
    #mylist[1:-1]的原理,start_index=1说明,要从1的位置开始取
    #而-1呢?代表的是最右侧,即最末尾的一个元素位置。本例中指“9”这个元素的坐标
    #而stop_index取出的值是不包含它所在的元素的。所以就取出了[1, 2, 3, 4, 5, 6, 7, 8]
    

    还有一点我们上面已经明确提示:如果不指定第三个参数,步长就为1,必须在list[start_index]元素的【逻辑】位置右边,否则取不出元素
    如下面的\color{red}{错误}例子:

    >>> mylist=[0,1,2,3,4,5,6,7,8,9]
    >>> mylist[-1:-2]
    []
    

    咦?按我们的想法,在本示例中,开始位-1代表了9,而-2代表了结束位8,而且不包含结束位的值,那么是不是应该打印出9呢?而结果为什么是空值呢?
    引入我们上面所说的:如果步长不指定,步长为1 , stop要保证逻辑位置在start的左边。
    如果我们改成下面这样:

    >>> mylist[-4:-2]
    [6, 7]
    

    如下逻辑
      0  \color{red}{|}  1 \color{red}{|} 2 \color{red}{|} 3 \color{red}{|} 4 \color{red}{|} 5 \color{red}{|} 6 \color{red}{|} 7 \color{red}{|} 8 \color{red}{|} 9  

    [-10]\color{red}{|}[-9]\color{red}{|}[-8]\color{red}{|}[-7]\color{red}{|}[-6]\color{red}{|}[-5]\color{red}{|}[-4]\color{red}{|}[-3]\color{red}{|}[-2]\color{red}{|}[-1]

    -4这个位置代表的是:-1(9),-2(8),-3(7),-4(6),则截取之后,起始一定是6
    -2这个位置代表的是:-1(9),-2(8) , 而且最后一位不截取,则最后的结果就是[6,7]

    但是如果我们用下面的取值:

    >>> mylist[-2:-4]
    []
    

    同样的,假如:
    -2这个位置代表的是:-1(9),-2(8) 开始为8
    -4这个位置代表的是:-1(9),-2(8),-3(7),-4(6) ,结束位为6
    但是步长没指定,则打印出了[]
    如果我们加上步长:-1,看一下

    >>> mylist[-2:-4:-1]
    [8, 7]
    

    所以综上,步长其实控制了取值的方向
    如果步长为正,则起始位一定要在结束位的左侧才能取到值
    如果步长为负,则起始位一定要在结束位的右侧才能取到值(取到的值也将为逆序)

    遍历

    mylist = [1,2,3,4,5]
    for i in range(len(mylist)):
        print(mylist[i])
    
    包含操作 in 和 not in
    my_list = [1, 3, 5, 7, 9]
    for i in range(10):
        if i in my_list:
            print(str(i)+"in list")
        if i not in my_list:
            print(str(i)+"not in list")
    #打印结果
    0not in list
    1in list
    2not in list
    3in list
    4not in list
    5in list
    6not in list
    7in list
    8not in list
    9in list
    

    追加 append()和extend()

    append()是追加
    extend()是扩展追加
    怎么理解?我们看例子吧

    >>> mylist=[1,2,3]
    >>> mylist.append([4,5,6])
    >>> mylist
    [1, 2, 3, [4, 5, 6]]
    >>> mylist=[1,2,3]
    >>> mylist.extend([4,5,6])
    >>> mylist
    [1, 2, 3, 4, 5, 6]
    

    删除pop(),remove(),del

    pop()

    >>> mylist=[1,2,3]
    >>> mylist.pop()
    3
    >>> mylist
    [1, 2]
    

    remove(<元素>)

    >>> mylist=['a','b','c']
    >>> mylist.remove('b')
    >>> mylist
    ['a', 'c']
    

    del

    >>> mylist
    ['a', 'b', 'c']
    >>> del mylist[2]
    >>> mylist
    ['a', 'b']
    

    插入insert()

    >>> mylist=[1,2,3]
    >>> mylist.insert(2,9)
    >>> mylist
    [1, 2, 9, 3]
    

    两个列表合并

    两个列表合并,我们也可以使用extend()来实现,如下:

    >>> mylist=[1,2,3]
    >>> mytp=[4,5,6]
    >>> mylist.extend(mytp)
    >>> mylist
    [1, 2, 3, 4, 5, 6]
    

    其它的方法

    reverse()#元素反转
    sort()#元素排序

    元组=============================

    介绍:
    元组和列表类似,只不过列表使用的是小括号来定义,而且定义后的元素不可变(这亲就代表有些更改类的操作在元组中将受到一定限制)。

    定义

    >>> mylist=(1,2,3)
    >>> mylist
    (1, 2, 3)
    >>> mylist[2]
    3
    

    更多内容可以在使用时搜索,这里不再做更多介绍。

    相关文章

      网友评论

          本文标题:基础·数据容器·列表&元组

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