0%

8、序列.md

一、概要

在Python中,最基本的数据结构是序列(sequence)。序列中的每个元素被分配一个序号——即元素的位置,也称为索引。第一个索引是 0,第二个则是 1,以此类推。序列中的最后一个元素标记为 -1,倒数第二个元素为 -2,以此类推。 Python包含 6 种内建的序列,包括列表、元组、字符串、Unicode字符串、buffer对象和xrange对象。

  1. 索引
  2. 分片
  1. 检查某个元素是否属于序列
  2. 计算序列长度
  3. 计算最大元素及最小元素

二、索引

  1. 概念

    元素在序列中的编号。这些编号从0开始递增,0表示第一个元素,最后一个元素为序列的长度-1

  2. 语法格式

    1
    seq[索引]
  3. 结构图

  4. 示例代码

    字符串中使用索引

    1
    2
    3
    4
    5
    demo = 'Hello World'
    print(demo[0]) #输出 H
    print(demo[5]) #输出空格字符串
    print(demo[-1]) #输出 d
    #思考可不可以索引是-0

    函数中使用索引,有一些函数的返回值为字符串,有的返回其他的序列,我们可以在函数调用之后使用[]来对返回序列的元素值进行索引

    1
    2
    3
    In [6]: input("请输入:")[1]
    请输入:123
    Out[6]: '2'

三、切片

  1. 定义

    切片也叫分片,即提取一个范围内的序列

  2. 语法格式

    1
    序列名(或字符串字面值)[beg_index:end_index,step] 
  3. 说明

    • beg_index

      起始下标,默认0

    • end_index

      终止下标,默认取到末尾

    • step:

      表示取值的步长,默认为1,步长值不能为0,默认为1,步长可以为负数,表示从右向左提取元素

  4. 注意事项

    • 范围采用左闭右开(顾头不顾尾),即第一个索引元素包含在分片内,第二个则不包含在分片内。
    • 终止索引超出范围时,分片直接取到序列最后一个元素
    • 索引和步长都具有正负两个值,分别表示左右两个方向取值。索引的正方向从左往右取值,起始位置为0;
    • 负方向从右往左取值,起始位置为-1。因此任意一个序列结构数据的索引范围为 -len到 len-1范围内的连续整数。
  5. 示例代码

    1、同时忽略两个索引,整个序列都成为分片了

    1
    2
    cele = "you can you up ,no can no bb ^_^"
    print(cele[:]) #输出 全部

    2、开始索引,结束索引默认,步长默认,从包含的开始索引截取至末尾

    1
    print(cele[1:]) 

    3、开始索引为负数,结束索引默认,步长默认,从右边开始截取至末尾

    1
    print(cele[-1:]) 

    4、结束索引,开始索引忽略,步长默认,截取0至结束索引

    1
    print(cele[:5]) 

    5、结束索引为负数,开始索引忽略,步长默认,截取0至右边结束索引

    1
    print(cele[:-3])

    6、开始索引比结束索引的元素在序列中出现得晚时,切片为空序列

    1
    print(cele[-3:1])

    7、步长为2,截取开始索引到结束索引

    1
    print(cele[0:10:2])

    8、左索引比右索引的元素在序列中出现得晚时

    1
    print(cele[::-1]) #反置
  6. 总结

    • seq[start_index]

      返回索引值为start_index的对象。start_index为 -len(seq)到len(seq)-1之间任意整数。

    • seq[start_index: end_index]

      返回索引值为start_index到end_index-1之间的连续对象。

    • seq[start_index: end_index : step]

      返回索引值为start_index到end_index-1之间,并且索引值与start_index之差可以被step整除的连续对象。

    • seq[start_index: ]

      缺省end_index,表示从start_index开始到序列中最后一个对象。

    • seq[:end_index]

      缺省start_index,表示从序列中第一个对象到end_index-1之间的片段。

    • seq[:]

      缺省start_index和end_index,表示从第一个对象到最后一个对象的完整片段。

    • seq[::step]

      缺省start_index和end_index,表示对整个序列按照索引可以被step整除的规则取值

四、序列相乘

  1. 说明

    用数字x乘以一个序列会产生新的序列,在新的序列中,原来的序列将被重复x次

  2. 示例代码

    1
    2
    3
    i = '1' * 5
    print(type(i))
    print(i)

五、序列相加

  1. 说明

    两个序列相加返回一个新的序列

  2. 示例代码

    1
    2
    3
    4
    seq1 = 'Hello'
    seq2 = 'World'
    seq3 = seq1 + seq2
    print(seq3)

六、使用None创建空序列

  1. 示例代码

    1
    2
    3
    sequence = 10 * [None]
    sequence
    [None, None, None, None, None, None, None, None, None, None]

七、是否包含

  1. 说明

    指某值是否在序列中,使用in运算符,运算符结果为布尔值True 或者 False

  2. 语法格式

    1
    '某值' in 序列
  3. 示例代码

    1
    2
    3
    4
    cele = "you can you up ,no can no bb ^_^"
    print('y' in cele) # True
    print('^_^' in cele) # True
    print('you1' in cele) # false

八、序列长度

  1. 内置函数

    1
    len(序列)
  2. 示例代码

    1
    2
    cele = "you can you up ,no can no bb ^_^"
    print(len(cele)) #32

九、最小值

  1. 内置函数

    1
    min(序列)
  2. 示例代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #纯数字
    numbers = "123456789"
    print(min(numbers)) #1
    #纯字母
    letter = "abcdef"
    #字母加数字
    letter = "abcdef123"
    print(min(letter)) #1
    #中文 底层比较是Unicode编码
    letter = "时间在哪里,成就就在哪里"
    print(min(letter)) #输出 ,(\u002c)

十、最大值

  1. 内置函数

    1
    max(序列)
  2. 示例代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #纯数字
    numbers = "123456789"
    print(max(numbers)) #9
    #纯字母
    letter = "abcdef"
    #字母加数字
    letter = "abcdef123"
    print(max(letter)) #f
    #中文 底层比较是Unicode编码
    letter = "时间在哪里,成就就在哪里"
    print(max(letter)) #输出 间(\u95f4)