Python--数据结构


序列sequence

通用的序列操作

  • 索引
    • 索引从0开始
    • 最后一个元素的索引可以用-1表示
    • 字面量后面可直接执行索引操作,而不必先把字面量赋值给一个变量
  • 切片
    • [起始索引:结束索引:步长]
    • 三个值都可以省略
      • 省略起始索引,表示从第一个元素开始
      • 省略结束索引,表示一直到列表最后,包括最后一个元素
      • 省略步长,则步长为1
    • 返回结果不包含结束索引的值
    • 结束索引可以大于列表的长度,不会报错,返回值一直到最后一个元素
    • 步长不能为0,可以是负数
    • 当步长为负数时
      • 表示从后往前操作
      • 起始索引必须大于结束索引,否则返回的时空列表[]
  • 相加
    • 相同类型的序列可以使用加号+直接拼接,不同类型不可以相加
      • 'hello' + 'world' = 'hello world'
      • [1, 2, 3] + [4, 5, 6] = [1, 2, 3, 4, 5, 6]
  • 相乘
    • 序列 * n 表示重复这个序列n次创建一个新序列
      • [1, 2, 3] * 2 = [1, 2, 3, 1, 2, 3]
  • 成员资格
    • xxx in 序列: 返回True或者False

内置函数

  • len(序列): 返回序列元素个数
  • max(序列): 返回序列中最大的元素
  • min(序列): 返回序列中最小的元素

list 列表

  • 修改元素
    • _list[index] = xxx
    • 不能跨界赋值,否则报错:IndexError: list assignment index out of range
  • 删除元素
    • del _list[开始索引:结束索引:步长]
    • 也就是把选中的元素从列表中删除
  • 切片操作
    • _list[开始索引:结束索引:步长] = 新的列表(可以为空列表[])
    • 就是用新列表的元素替换掉原列表中选中的元素
    • 如果步长不是1,则新列表的元素数量要与等待替换的元素数量一致
    a = [1, 2, 3, 4, 5, 6]
    # a[::] = ['a', 'b']  # 输出 ['a', 'b']
    # a[2:] = ['a', 'b']  # 输出 [1, 2, 'a', 'b']
    a[2:5] = ['a', 'b']  # 输出 [1, 2, 'a', 'b', 6]
    # a[2:2] = ['a', 'b']  # 表现为插入 输出 [1, 2, 'a', 'b', 3, 4, 5, 6]
    # a[2:5] = []  # 表现为删除 输出 [1, 2, 6]
    # a[::2] = ['a', 'b']  # 报错 ValueError: attempt to assign sequence of size 2 to extended slice of size 3
    # a[::2] = []  # 报错 ValueError: attempt to assign sequence of size 0 to extended slice of size 3
    # a[::2] = ['a', 'b', 'c']  # 数量要一致,一一替换 输出 ['a', 2, 'b', 4, 'c', 6]
    # a[::-1] = ['a', 'b']  # 报错 ValueError: attempt to assign sequence of size 2 to extended slice of size 6
    print(a)
    

tuple 元组

str 字符串

映射mapping

dict 字典