美文网首页
2020-01-09

2020-01-09

作者: 西溪里 | 来源:发表于2020-01-09 18:11 被阅读0次

    列表与元组

    通用序列操作

    索引 、分片、序列相加、乘法、成员资格、长度、最小值和最大值

    索引 indexing

    索引0指向第一个元素,索引1指向第二个元素……
    **(负数索引)**python的序列也可以从右边开始索引,最右边的元素索引是-1
    

    分片 slicing

    索引是对单个元素进行访问,**分片访问一定范围内的元素**
    分片操作既支持正数索引也支持负数索引
    **第一个索引的元素包含在分片内,第二个索引的元素不包含在分片内**
    
    ```python
    >>> number = [1,2,3,4,5,67,8,9,10]
    >>> number[1:3]  # 取索引为第一和第二的元素
    [2, 3]
    >>> number[-3:-1] # 取倒数第二和倒数第三的元素
    [8, 9]
    >>> number[-3:] #  取最后三个元素
    [8, 9, 10]
    >>> number[0:3]  # 取前三个元素
    [1, 2, 3]
    >>> number[0::2]  # 步长为2
    [1, 3, 5, 8, 10]
    >>> number[10:0:-2] # 步长可以为负  第二个索引为0 取不到第1个元素
    [10, 8, 5, 3]
    对于正数步长,python会从序列头部开始向右提取元素,直到最后一个元素(分片中);对于负数步长,python则是从序列尾部开始向左提取元素,直到第一个元素(分片中)
    ```
    

    序列相加

    使用加号 '+ ' 可以进行序列的连接操作

      >>> [1,2,3] + [4,5,6]  # 数字序列相加
      [1, 2, 3, 4, 5, 6]
      >>> 'hello,' + 'world'  # 字符串序列相加
      'hello,world'
      >>> [1,2,3] + 'hello'  # 字符串序列与数字序列相加 (发生错误)
      Traceback (most recent call last):
        File "<pyshell#11>", line 1, in <module>
          [1,2,3] + 'hello'  # 字符串序列与数字序列相加 (发生错误)
      TypeError: can only concatenate list (not "str") to list 
    

    只有类型相同的序列才能通过加号进行序列连接操作,不同类型的序列不能通过加号连

    乘法

    序列中的乘法:一个数字n乘以一个序列会生成一个新的序列,新的序列是将原来的序列重复 n次

    ```python
    >>> 'hello'* 5
    'hellohellohellohellohello'
    >>> [3] * 5
    [3, 3, 3, 3, 3]
    ```
    

    ​ python中序列的乘法可以帮助我们快速做一些初始化操作(重复操作,空列表和None)
    python ​ >>> sq = [None] * 5 # 初始化sq为含有5个None的序列 ​ None是 python 的内建值 表示这里什么都没有 ​ >>> sq ​ [None, None, None, None, None] ​

    成员资格

    in 运算符用来检查一个值是否在序列中,在返回True、不在返回False
    
      >>> str = 'hello'
      >>> 'e' in str
      True
      >>> 'a' in str
      False
      >>> users = ['xiaoming','xiaozhang','xiaozhu']
      >>> 'xiaoming' in users  # 检测字符串是否在字符串列表中
      True
      >>>  1 in users  # 数字类型不能在字符串类型中通过in 进行成员检测
      
      SyntaxError: unexpected indent
      >>> 1 in [1,2,3]
      True
      >>> '1' in [1,2,3]  # 字符串类型类可以在数字列表中通过in 进行成员资格检测
      False
      
    

    长度、最小值和最大值

    python 提供了长度、最小值和最大值的内建函数,分别为len、min和max

        >>> numbers = [200,300,500]
        >>> len(numbers)  # 长度
        3
        >>> min(numbers)  # 最小值
        200
        >>> max(numbers)  # 最大值
        500
    

    列表

    列表的内容是可变的

    更新列表

    序列中的操作,如索引、分片、序列相加和乘法都适用与列表
    除此之外列表中还有其他方法用来更新列表(元素赋值、元素删除、分片赋值和列表方法)

    • 元素赋值
      赋值语句是最简单改变列表的方法

      >>> a = [1,2,3,4]
      >>> a[1] = 10
      >>> a
      [1, 10, 3, 4]
      >>> a[3] = 100  # 改变了第4个元素的值
      >>> a
      [1, 10, 3, 100]
      >>> a[2] = 'hello'  # 对一个列表中的元素赋不同类型的值
      >>> a
      [1, 10, 'hello', 100]
      >>> a[5] = 5 # 不能为一个不存在元素位置赋值  列表a的长度为4 5超出了列表范围
      Traceback (most recent call last):
        File "<pyshell#35>", line 1, in <module>
          a[5] = 5 # 不能为一个不存在元素位置赋值
      IndexError: list assignment index out of range
      

      对一个列表中的元素赋不同类型的值
      不能为一个不存在元素位置赋值

    • 增加元素 append
      在列表末尾添加新对象

      list.append(obj)  直接修改列表在其尾部添加一个元素 
      无返回值
      
      >>> num = [1,2,3]
      >>> num
      [1, 2, 3]
      >>> num.append(4)  # 添加 4
      >>> num
      [1, 2, 3, 4]
      >>> num.append('hello')  # 添加一个字符串
      >>> num
      [1, 2, 3, 4, 'hello']
      
    • 删除元素 del
      使用del list[num] num是要删除的列表元素索引

        >>> num = ['a','b','c','d']
        >>> len(num)
        4
        >>> del num[0] # 删除第一个元素 ‘a'
        >>> num
        ['b', 'c', 'd']
        >>> len(num)
        3
        >>> del num[-1]   # 删除最后一个元素
        >>> num
        ['b', 'c']
      
    • 分片赋值
      list()函数:将序列直接转换成列表

         >>> show = list('湖人队总冠军')
         >>> show
         ['湖', '人', '队', '总', '冠', '军']
         >>> show[0:2] = list('热火队')  # 分片赋值
         >>> show
         ['热', '火', '队', '队', '总', '冠', '军']
         >>> greeting = list('hi')
         >>> greeting
         ['h', 'i']
         >>> greeting[1:] = list('ello')   #使用与原序列不等长的序列将分片替换
         >>> greeting
         ['h', 'e', 'l', 'l', 'o']
         >>> boil = list('女排夺冠了')
         >>> boil
         ['女', '排', '夺', '冠', '了']
         >>> boil[2:2] = list('2016年奥运会')  #不替换任何元素在任意位置插入新元素
         >>> boil
         ['女', '排', '2', '0', '1', '6', '年', '奥', '运', '会', '夺', '冠', '了']
         >>> boil[2:10] = list()  #对序列中任意位置的元素进行删除
         >>> boil
         ['女', '排', '夺', '冠', '了']
      
      

    嵌套列表

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

       >>> num = [1,2,3]
       >>> num
       [1, 2, 3]
       >>> str = list('abc')
       >>> str
       ['a', 'b', 'c']
       >>> mix = [num,str]
       >>> mix
       [[1, 2, 3], ['a', 'b', 'c']]
       >>> mix[1]
       ['a', 'b', 'c']
       >>> mix[0]
       [1, 2, 3]
       >>> 
    

    列表方法

    方法是与对象有紧密联系的函数
    调用语法: 对象.方法(参数)
    常用方法:

    • append 在列表末尾添加新元素
      使用方法: list.append(obj) 无返回值
    • count 统计某个元素在在列表中出现的次数
      使用方法: list.count(obj)
    • extend 在列表末尾一次性追加另一个序列的多个值
      使用方法: list.extend(seq) seq代表元素列表
    >>> a = ['hello','world']
    >>> b = ['python','is','funny']
    >>> a.extend(b)
    >>> a
    ['hello', 'world', 'python', 'is', 'funny']
    
    • index 从列表中找出某个值第一个匹配项的索引位置
      使用方法: list.index(obj) obj表示要查找的对象
    • insert 向列表指定位置插入一个元素
      使用方法:list.insert(index,obj) index插入的位置 obj插入的元素
    • pop 移除列表中的一个元素(默认是最后一个元素),并返回该元素的值
      使用方法:list.pop(num) num是可选参数,代表要移除列表的对象
      **使用pop方法可以实现栈(后进先出)
    • remove 移除列表中某一个值的第一个匹配项
      使用方法:list.remove(obj)
    • reverse 反向列表元素
      使用方法:list.reverse() 无需参数
      扩展:如果需要反向一个序列可以使用 reversed函数
      >>> num = [11,2,3]
      >>> print('使用reversed函数翻转结果:',list(reversed(num)))
      使用reversed函数翻转结果: [3, 2, 11]
    
    • sort 对原列表进行排序,可以指定参数 ,默认按升序排列
      **sort方法改变了原来的列表而不是返回一个已排序过的列表 **
    >>> num = [1,5,3,7]
    >>> n = num.sort()
    >>> print('变量n的结果是:',n)
    变量n的结果是: None
    >>> print('列表num排序的结果:',num)
    列表num排序的结果: [1, 3, 5, 7]
    

    sort方法修改了列表num,但返回的是空值,所以n的值是None
    若不将原列表分片后赋值给另一个变量,两个列表都会被排序

    sort有一个对应的函数sorted,可以直接获取列表的副本进行排序

    >>> num = [5,8,1,3,6]
    >>> n = sorted(num)
    >>> print('变量n的结果是:',n)
    变量n的结果是: [1, 3, 5, 6, 8]
    >>> print('num的结果是:',num)
    num的结果是: [5, 8, 1, 3, 6]
    

    sort方法有两个可选参数key和reverse(逆序)

    >>> field = ['study','python','is','happy']
    >>> field
    ['study', 'python', 'is', 'happy']
    >>> field.sort(key=len,reverse=True)
    >>> field.sort(key=len,reverse=True)  #按字符串长度降序排序
    >>> field
    ['python', 'study', 'happy', 'is']
    
    • clear 清空列表
      使用方法:list.clear()
    >>> field
    ['python', 'study', 'happy', 'is']
    >>> field.clear()
    >>> field
    []
    
    • copy 复制列表
      使用方法:list.copy()
    >>> field = ['python','is','study','is']
    >>> field_copy = field.copy()
    >>> field_copy
    ['python', 'is', 'study', 'is']
    >>> field_copy1=field[:]   # 类似效果
    >>> field_copy1
    ['python', 'is', 'study', 'is']
    

    元组

    元组与列表类似,不同的是元组的元素不能修改(字符串也是不能修改的)

    元组的创建

    • 使用逗号分隔
    • 圆括号
    • tuple函数
      tuple函数将参数(一个序列)转换成元组,与list类似(转换成列表)
    >>> 1,2,3,4   # 使用逗号分隔
    (1, 2, 3, 4)
    >>> (1,2,3,4)  # 是用圆括号
    (1, 2, 3, 4)
    >>> tuple(['hello','world']) # tuple函数 参数是列表
    ('hello', 'world')
    >>> tuple('hello')           #tuple函数  参数是字符串
    ('h', 'e', 'l', 'l', 'o')
    >>> tuple(('hello','world'))  #tuple函数  参数是元组
    ('hello', 'world')
    

    注意:创建包含一个值的元组

    >>> 1
    1
    >>> (1)
    1
    >>> (1,)  # 需要加上逗号
    (1,)
    >>> 1,    # 需要加上逗号
    (1,)
    >>> tuple('1')
    ('1',)
    >>> tuple('1',)
    ('1',)
    

    创建只包含一个值的元组需要加上逗号(利用tulpe函数除外)

    元组的基本操作

    访问元组、修改元组、删除元组、索引、截取……

    • 访问元组
      使用下标索引访问
    >>> num = (1,2,3,4)
    >>> print('num[1]:',num[1])
    num[1]: 2
    >>> num = 1,2,3,4,5,6,7
    >>> num
    (1, 2, 3, 4, 5, 6, 7)
    >>> print('num[1:5]:',num[1:5])
    num[1:5]: (2, 3, 4, 5)
    
    • 修改元组
      元组中元素的只是不能被修改的,但可以元组进行连接组合
    >>> num=1,2,3
    >>> field=('hello','world')
    >>> num
    (1, 2, 3)
    >>> field
    ('hello', 'world')
    >>> num+field
    (1, 2, 3, 'hello', 'world')
    
    • 删除元组
      元组中的元素值不允许被删除,但可以使用del语句删除整个元组
    >>> field
    (1, 2, 3, 'hello', 'world')
    >>> del field
    >>> print('删除后的结果:',field)
    Traceback (most recent call last):
     File "<pyshell#14>", line 1, in <module>
       print('删除后的结果:',field)
    NameError: name 'field' is not defined
    

    元组field被del后输出会报错(field没有被定义)

    • 元组索引、截取
      元组也是序列,所以可以访问元组中指定位置的元素,也可以截取索引中的一段元素
    >>> num
    (1, 2, 3)
    >>> num[2]
    3
    >>> num[-1]
    3
    >>> num[:]
    (1, 2, 3)
    
    • 元组内置函数
      计算元素个数len、返回最大值max、最小值min、列表转换tuple

    元组和列表的区别 区别

    列表和元组的区别在于元组不能修改,元组一旦初始化就不能修改
    元组不可变所以元组更加安全

    >>> t = ('a','b',['A','B'])   #定义一个元组并初始化
    >>> t
    ('a', 'b', ['A', 'B'])
    >>> t[2][0]='X'
    >>> t[2][1]='Y'
    >>> t
    ('a', 'b', ['X', 'Y'])   #  发现元组“被修改”
    >>> t[2].append('G')
    >>> t
    ('a', 'b', ['X', 'Y', 'G'])
    

    表面上看元组发生了变化,其实变得不是元组的元素、变得是list的列表。元组开始指向list列表没有改变成别的list列表,故元组的不变是指每个元素的指向是不变的,例如上面的程序t[2]是指向一个list列表的,不能指向其他对象,但是指向的list列表是可变的

    相关文章

      网友评论

          本文标题:2020-01-09

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