美文网首页Python3.5 笔记
Python3.5笔记——第3章 列表与元组

Python3.5笔记——第3章 列表与元组

作者: 行者无疆_1024 | 来源:发表于2018-08-02 00:22 被阅读0次

    Python 3.5笔记

    第三章 列表与元组

    通用序列操作

    索引

    序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字,代表它在序列中的位置(索引),从0开始。获取元素的方式为:在变量后加中括号,在中括号中输入所取元素的编号值。索引的位置可以从左到右,也可以从右到左。从左到右时从0开始,从右到左时从-1开始。

    greeting = "Hello"
    print(greeting[0])
    print(greeting[-1])
    

    输出:

    H
    o
    

    对于字符串,不定义变量,直接使用索引也是可以的

    print("hello"[1])
    

    输出

    e
    

    分片

    索引用来对单个元素进行访问,使用分片可以对一定范围内的元素进行访问。分片通过冒号相隔的两个索引实现。

    分片操作即支持正数索引,也支持负数索引。分片中最左面的元素必须比最右面的元素早出现在序列中。(并不是指左面的索引比右面的元素数值小),否则就返回一个空序列。

    分片操作的实现需要提供两个索引作为边界。第一个索引的元素包含在分片内,第二个索引的元素不包含在分片内。像数学中的a<=x<b,x是我们需要得到的元素,a是分片操作的第一个索引,b是第二个索引,b不包含在x的范围内。

    number = [1,2,3,4,5,6,7,8,9,10]
    print(number[0:3])
    print(number[-1:-3])#分片中最左面的元素必须比最右面的元素早出现在序列中
    # (并不是指左面的索引比右面的元素数值小),否则就返回一个空序列
    print(number[-3:-1])
    print(number[-3:0])#比如这个时候就会返回空置,所以注意理解上面那句话,
    #即:最左面的元素必须比最右面的元素早出现在序列中
    # (并不是指左面的索引比右面的元素数值小)
    

    输出:

    [1, 2, 3]
    []
    [8, 9]
    []
    

    如果需要取得的分片包括序列结尾的元素,只需将第二个索引设置为空即可。

    #如果需要取得的分片包括序列结尾的元素,只需将第二个索引设置为空即可
    print(number[-3:])
    print(number[0:])
    print(number[:0])#最后一个元素为第一个,输出为空
    print(number[:3])
    print(number[:])#输出整个数组
    

    输出

    [8, 9, 10]
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10
    []
    [1, 2, 3]
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    
    步长

    分片中使用步长用于取序列中不连续的元素。没有设置步长时,也可以理解为默认步长是1。

    print(number[0:10:1])
    print(number[0:10:2])
    print(number[2:5:3])
    print(number[::3])
    

    输出

    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    [1, 3, 5, 7, 9]
    [3]
    [1, 4, 7, 10]
    

    输入的步长不能为0

    print(number[0:10:0]) #输入的步长不能为0
    

    输出

    Traceback (most recent call last):
      File Chapter3.py, line 29, in <module>
        print(number[0:10:0])
    ValueError: slice step cannot be zero
    

    输入的步长也可以是负数,当步长是负数时,从右往左进行。

    对于正数步长,python会从序列的头部开始向右提取元素,直到最后一个元素;对于负数步长,则是从序列的尾部开始向左提取元素,直到第一个元素。正数步长必须让开始点小于结束点,而负数步长必须让开始点大于结束点。

    print(number[10:0:-2])
    print(number[:5:-2])#这个要注意理解一下
    print(number[10:0:-1])#注意number的最大索引应该是9,索引10指向的是第11个元素,是不存在的。
    #但是由于在最后一个元素之后,因此在分片中能得到最后一个元素,这样做是没问题的。
    #第二个索引为0,取不到序列中的第一个元素
    #print(number[10])#但是直接访问的话是不可以的
    print(number[10::-1])#设置number的第二个索引为空,可以取到序列的一个元素。
    print(number[2::-1])#设置number的第二个索引为空,可以取到序列的一个元素。
    print(number[2:0:-1])#第二个索引为0,取不到序列中的第一个元素
    

    输出

    [10, 8, 6, 4, 2]
    [10, 8]
    [10, 9, 8, 7, 6, 5, 4, 3, 2]
    [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
    [3, 2, 1]
    [3, 2]
    

    序列相加

    使用加号可以进行序列的连接操作。数字序列和数字序列相加后,得到还是数字序列。字符串或字符串序列和字符串或字符串序列相加后,得到的还是字符串或字符串序列。但是,只有类型相同的序列才能通过加号进行序列连接操作,不同类型的序列不能通过加号进行序列连接操作。

    #序列相加
    a = [1,2,3]
    b = [4,5,6]
    print(a + b)
    c = ["hello"]
    d = ["python"]
    print(c + d)
    e = "hello,"
    f = "python"
    print(e + f)
    print(a + e)
    

    输出

    [1, 2, 3, 4, 5, 6]
    ['hello', 'python']
    hello,python
    Traceback (most recent call last):
      File "D:/pyspace/hellopython/HellloWorld.py", line 50, in <module>
        print(a + e)
    TypeError: can only concatenate list (not "str") to list
    

    序列乘法

    用一个数字x乘以一个序列会生成新的序列。在新的序列中,原来的序列将被重复x次,这就是序列中的乘法。

    如果要创建一个重复序列,就可以使用序列的乘法快速达到需要的列表。

    #序列的乘法
    print("序列的乘法")
    print("hello"*5)
    print([7]*10)
    

    输出

    序列的乘法
    hellohellohellohellohello
    [7, 7, 7, 7, 7, 7, 7, 7, 7, 7]
    

    python中可以使用None代表空值,None是Python的内建值,确切的含义是这里什么也没有。

    #空置相乘
    aa = [None]*5
    print(aa)#长度是5的空置
    aa = []*5
    print(aa)#只有一个元素是空值,即长度是1的空置
    
    [None, None, None, None, None]
    []
    

    成员资格,in操作符的用法

    in运算符用于检验某个条件是否为真,并返回检验结果,检验结果为真返回True,结果为假返回False

    #成员资格
    print("成员资格")
    greeting = "hello,world"
    print('w' in greeting)
    print('a' in greeting)
    users = ["C罗","梅西","姆巴佩"]
    print("C罗" in users)
    print("卡卡" in users)
    number = [1,2,3,4,5]
    print(1 in number)
    print(6 in number)
    print(3 in greeting)#数字类型不能在字符串类型中通过in进行成员资格检测
    
    成员资格
    True
    False
    True
    False
    True
    False
        print(3 in greeting)
    TypeError: 'in <string>' requires string as left operand, not int
    

    长度、最小值和最大值

    #长度、最小值和最大值
    print("长度、最小值和最大值")
    numbers = [300,200,100,800,500]
    print(len(numbers))
    print(max(numbers))
    print(min(numbers))
    

    输出

    长度、最小值和最大值
    5
    800
    100
    

    列表

    更新列表

    元素赋值

    通过对元素赋值,可以更新列表的值。可以对列表中的元素赋不同类型的值。对列表中的元素赋值时,不能超过列表的最大编号

    #元素赋值
    print("元素赋值")
    a = [1,2,3,2,1]
    a[1] = 10
    print(a)
    a[2] = "hello"#可以对列表中的元素赋不同类型的值
    print(a)
    a[5] = 'abc'#对列表中的元素赋值时,不能超过列表的最大编号
    print(a)
    

    输出

    元素赋值
    [1, 10, 3, 2, 1]
    [1, 10, 'hello', 2, 1]
        a[5] = 'abc'
    IndexError: list assignment index out of range
    
    增加元素

    append()方法是一个用于在列表末尾添加新对象的方法。该方法的语法如下:

    list.append(obj)
    

    此语法中list代表列表,obj代表需要添加到list列表末尾的对象

    删除元素
    print("删除元素")
    str = ["a","b","c","d","e"]
    print(len(str))
    del str[0]
    print(str)
    print(len(str))
    

    输出

    删除元素
    5
    ['b', 'c', 'd', 'e']
    4
    
    分片赋值

    可以通过分片赋值直接对列表进行变更。分片赋值不仅能对列表赋值,还可以使用与原序列不等长的序列将分片替换,并改变列表的长度。

    list()函数

    list()函数可以直接将字符串转换为列表。list()函数不仅适用于字符串,所有类型的序列都适用。

    #分片赋值
    print("分片赋值")
    show = list("2018世界杯法国夺冠了")
    print(show)
    show[7:9] = list("中国")
    print(show)
    greeting = list("hi")
    print(greeting)
    greeting[1:] = list("ello")
    print(greeting)
    

    输出

    分片赋值
    ['2', '0', '1', '8', '世', '界', '杯', '法', '国', '夺', '冠', '了']
    ['2', '0', '1', '8', '世', '界', '杯', '中', '国', '夺', '冠', '了']
    ['h', 'i']
    ['h', 'e', 'l', 'l', 'o']
    

    分片赋值可以在不替换任何原有元素的情况下,在任意位置插入新元素。

    与append()函数的区别,append()函数只能在末尾增加列表的长度

    #分片赋值可以在不替换任何原有元素的情况下,在任意位置插入新元素
    field = list("ae")
    print(field)
    field[1:1] = list("bcd")
    print(field)
    field2 = list("法国夺冠了")
    field2[0:0] = list("2018世界杯")
    print(field2)
    
    ['a', 'e']
    ['a', 'b', 'c', 'd', 'e']
    ['2', '0', '1', '8', '世', '界', '杯', '法', '国', '夺', '冠', '了']
    

    分片赋值同样支持类似删除的功能

    #分片赋值同样支持类似删除的功能
    field = list("abcde")
    print(field)
    field[1:4] = []
    print(field)
    field2 = list("2018世界杯法国夺冠了")
    del field2[0:7]
    print(field2)
    
    ['a', 'b', 'c', 'd', 'e']
    ['a', 'e']
    ['法', '国', '夺', '冠', '了']
    
    嵌套列表

    在列表中可以嵌套列表,嵌套的列表取出后还是列表

    #嵌套列表
    field = list("abc")
    print(field)
    number = [1,2,3]
    mix = [field,number]
    print(mix)
    print(mix[0])
    print(mix[1])
    

    输出

    ['a','b','c']
    [['a', 'b', 'c'], [1, 2, 3]]
    ['a', 'b', 'c']
    [1, 2, 3]
    
    列表方法
    1.append

    这个方法前面已经讲过了,用于在列表末尾增加元素。格式为

    list.append(obj)
    
    2.count

    count()方法用于统计某个元素在列表中出现的次数。语法如下

    list.count(obj)
    
    3.extend

    extend()方法用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。语法如下:

    list.append(seq)
    

    seq代表元素列表

    使用序列相加的方法也能达到extend()方法的效果,但是并没有改变原来列表的值,这就是extend()方法和拼接的区别。

    同样可以使用分片赋值的方法达到同样的效果,但是不如extend()方法易于理解

    #list方法,extend()方法
    print("list方法,extend()方法")
    a = ["hello","world"]
    b = ["python","is","funny"]
    print(a.extend(b))#extend()方法的返回值是None
    print(a)#但是extend()方法改变了列表a的值
    a = ["hello","world"]
    print(a + b)#a + b的返回值是将a和b做了拼接
    print(a)#但是并没有改变a的值,这就是extend()方法和拼接的区别
    a[len(a):] = b
    print(a)
    

    输出

    list方法,extend()方法
    None
    ['hello', 'world', 'python', 'is', 'funny']
    ['hello', 'world', 'python', 'is', 'funny']
    ['hello', 'world']
    ['hello', 'world', 'python', 'is', 'funny']
    

    append与extend的区别

    print("append()与extend()的区别")
    a = ["hello"]
    b = ["python","is","funny"]
    a.append(b)#将b做为一个列表追加到a中
    print(a)
    a = ["hello"]
    c = "python,is,funny"
    a.append(c)#将b做为一个字符串追加到a中
    print(a)
    a = ["hello"]
    a.extend(b)
    print(a)#将b中的元素分别追加到a中
    a = ["hello"]
    c = "python,is,funny"
    a.extend(c)
    print(a)
    

    输出

    append()与extend()的区别
    ['hello', ['python', 'is', 'funny']]
    ['hello', 'python,is,funny']
    ['hello', 'python', 'is', 'funny']
    ['hello', 'p', 'y', 't', 'h', 'o', 'n', ',', 'i', 's', ',', 'f', 'u', 'n', 'n', 'y']
    
    4.index

    index()方法,用于返回元素在列表的索引位置。语法格式如下:

    list.index(obj)
    
    #index()方法
    print("index()方法")
    field = ["hello","world","python","is","funny"]
    print(field)
    print(field.index("hello"))
    print(field.index("python"))
    print(field.index("abc"))#不存在时会报错
    
    index()方法
    ['hello', 'world', 'python', 'is', 'funny']
    0
    2
    Traceback (most recent call last):
      File "D:/pyspace/hellopython/HellloWorld.py", line 169, in <module>
        print(field.index("abc"))
    ValueError: 'abc' is not in list
    
    5.insert

    insert()方法用于将对象插入列表。格式如下

    list.insert(index,obj)
    

    index代表对象obj需要插入的索引位置,obj代表插入的对象

    #insert()方法
    print("insert()方法")
    number = [1,2,3]
    print(number)
    print(number.insert(2,"插入在2之后3之前"))#insert方法并没有返回值,而是直接该表了列表的值
    print(number)
    number = [1,2,3]
    number[2:2] = ["插入在2之后3之前"]#使用分片赋值也能实现同样的功能,但是不如使用insert()方法好理解
    print(number)
    

    输出

    insert()方法
    [1, 2, 3]
    None
    [1, 2, '插入在2之后3之前', 3]
    [1, 2, '插入在2之后3之前', 3]
    
    6.pop

    pop()方法用于移除列表中的一个元素(默认是最后一个元素),并且返回该元素的值。语法格式为:

    list.pop() #默认是移除最后一个元素
    list.pop(index) #或者移除指定序列的元素,并且返回指定序列的元素
    

    code

    #pop()方法
    field = ["hello","world","python","is","funny"]
    print(field.pop())
    print(field)
    print(field.pop(1))
    print(field)
    

    输出

    funny
    ['hello', 'world', 'python', 'is']
    world
    ['hello', 'python', 'is']
    
    7.remove

    remove()方法用于移除列表中某个值的第一个匹配项。语法格式如下

    list.remove(obj)
    

    obj为将要remove的元素。remove返回None值,但是会改变原list的值

    #remove()方法
    field = ["hello","python","how","funny","python","is"]
    print(field.remove("python"))
    print(field)#注意只会删除匹配上的第一个元素
    
    None
    ['hello', 'how', 'funny', 'python', 'is']
    
    8.reverse

    reverse()方法用于方向列表中的元素。语法格式如下

    list.reverse()
    

    code

    #reverse()方法
    print("reverse()方法")
    number = [1,2,3]
    print(number.reverse())#注意reverse()方法的返回值是None
    print(number)#但是reverse()方法会改变list的值
    

    输出

    reverse()方法
    None
    [3, 2, 1]
    
    9.sort

    sort()方法用于对原列表进行排序,如果指定了参数,就使用参数指定的比较方法进行排序。语法格式如下

    list.sort(func)
    

    sort()方法不会改变返回值(返回None),而是直接改变列表的值。

    使用sorted()方法,则会直接返回列表反转后的结果

    #sort()方法
    print("sort()方法")
    number = [5,8,7,2,4,3]
    print(number.sort())#sort()方法并不会返回值
    print(number)#而是直接改变列表的值
    print(sorted(number))#使用sorted()方法,则会直接返回列表反转后的结果
    

    输出

    sort()方法
    None
    [2, 3, 4, 5, 7, 8]
    [2, 3, 4, 5, 7, 8]
    
    10.clear

    clear()方法用于清空列表,类似于del list[:]。语法格式为:

    list.clear()
    

    code

    #clear()方法
    print("clear()方法")
    field = ["hello","python","how","funny","python","is"]
    field.clear()
    print(field)
    

    输出

    clear()方法
    []
    
    11.copy

    copy()方法用于复制列表,类似于a[:]。语法格式为:

    list.copy()
    

    code

    #copy()方法
    print("copy()方法")
    field = ["hello","python"]
    field2 = field.copy()
    print(field2)
    

    输出

    copy()方法
    ['hello', 'python']
    
    12.高级排序

    sort()方法有两个可选参数,即key和reverse。key代表关键字,reverse为布尔值,True代表反转,False代表不反转。

    #sort()方法
    print("sort()方法")
    field = ["hello","python","funny","python","is"]
    print(field.sort(key=len,reverse=True))
    print(field)
    

    输出

    sort()方法
    None
    ['python', 'python', 'hello', 'funny', 'is']
    

    元组

    Python的元组于列表相似,不同之处在于元组的元素不能修改。创建元组的方式很简单,如果你用逗号分隔了一些值,就会自动创建元组。

    1. 定义元组时,加上括号和不加括号的效果是一样的
    2. 但是定义元组时必须得有逗号
    #元组
    print("元组的定义")
    number = 1,2,3
    print(number)#这样打印出的是元组
    print(1,2,3)#注意,有意思的是,这样打印时,打印的并不是一个元组。这样打印出来的是什么?
    number = (1,2,3)#加上括号和不加括号的效果是一样的
    print(number)
    field = "hello","world"
    print(field)
    field = ("hello","world")
    print(field)
    field = ()
    print(field)
    field = ("hello",)#定义元组时必须得有逗号
    print(field)
    field = ("hello")#如果没有逗号,则仅仅是一个字符串
    print(field)
    
    元组的定义
    (1, 2, 3)
    1 2 3
    (1, 2, 3)
    ('hello', 'world')
    ('hello', 'world')
    ()
    ('hello',)
    hello
    

    tuple函数

    tuple函数的作用就是以一个序列作为参数,并把它转换为元组。这点和list函数的性质基本一样。如果参数是元组,则会被原样返回。

    #tuple函数
    print("tuple函数")
    print(tuple(["hello","python"]))
    print(tuple("hello"))
    print(tuple(("hello",)))#如果参数是元组,则会被原样返回。
    

    输出

    tuple函数
    ('hello', 'python')
    ('h', 'e', 'l', 'l', 'o')
    ('hello',)
    

    元组的基本操作

    1. 访问元组

    直接使用元素的下标访问即可,支持分片

    #访问元组
    number = (1,2,3)
    print(number)
    print(number[0])
    print(number[0:2])
    

    输出

    (1, 2, 3)
    1
    (1, 2)
    
    2. 修改元组

    之前说过,元组是不可以修改的。但是可以对元组进行连接。

    #修改元组
    number = (1,2,3)
    number2 = (4,5,6)
    print(number + number2)
    

    输出

    (1, 2, 3, 4, 5, 6)
    
    3. 删除元组

    元组是不可以修改的,因此元组的值当然也是不可以删除的。但是可以删除整个元组

    #删除元组
    number2 = (1,2,3)
    del number2
    print(number2)
    

    输出

    Traceback (most recent call last):
      File "D:/pyspace/hellopython/HellloWorld.py", line 263, in <module>
        print(number2)
    NameError: name 'number2' is not defined
    

    元组内置函数

    1. len(tuple)函数
    2. max()函数
    3. min()函数
    number2 = (1,2,3)
    print(len(number2))
    #max()函数
    print(max(number2))
    #min()函数
    print(min(number2))
    

    输出

    3
    3
    1
    

    列表与元组的区别

    嵌套列表

    嵌套列表指的是,一个列表中包含另一个列表,即二维数组,甚至还有三维、四维等多维数组。

    t = (1,2,["hello","python"])
    print(t[2][1])
    

    输出

    python
    

    列表元组的区别

    区别在于,元组的值不可以修改,列表的值可以修改。

    number2 = (1,2,3)
    #number2[1] = 4 #元组的值不可以改变
    
    #嵌套列表
    t = (1,2,["hello","python"])
    print(t[2][1])
    t[2][1] = "world" #元组中列表的值可以改变
    print(t)
    t[1] = "abc"
    print(t) #元组的值不可以改变
    

    输出

    python
    (1, 2, ['hello', 'world'])
    Traceback (most recent call last):
      File "D:/pyspace/hellopython/HellloWorld.py", line 282, in <module>
        t[1] = "abc"
    TypeError: 'tuple' object does not support item assignment
    

    习题

    1. 用负数步长对列表和元组进行分片

    #用负数步长对列表和元组进行分片
    number2 = list("123465")
    print(number2)
    #将列表的顺序变为123456
    #number2[:-3:-1] = ["6","5"] #用分片赋值的方式实现
    number2.sort(reverse=False) #用sort()函数实现
    print(number2)
    #输出5,3
    print(number2[-2:-5:-2])
    number2 = tuple(['1', '2', '3', '4', '5', '6'])
    print(number2)
    #输出5,3
    print(number2[-2:-5:-2])
    

    输出

    ['1', '2', '3', '4', '6', '5']
    ['1', '2', '3', '4', '5', '6']
    ['5', '3']
    ('1', '2', '3', '4', '5', '6')
    ('5', '3')
    

    2.用索引取出下面list的指定元素

    #打印出hello
    field = [["hello", "world", "welcome"], ["study", "Python", "is", "funny"], ["good", "better", "best"]]
    print(field[0][0])
    #打印出Python
    print(field[1][1])
    #打印出best
    print(field[2][2])
    

    输出

    hello
    Python
    best
    

    相关文章

      网友评论

        本文标题:Python3.5笔记——第3章 列表与元组

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