元组 ( Tuple )

L -序列容器(有序数据结构) - 图1


定义元组

L -序列容器(有序数据结构) - 图2

  1. (value, value1, value2)
  2. # 定义一个元组tuple
  3. # 用"()"括起来,每个元素用','号隔开即可
  4. # 如果列表只有一个元素,第一个元素后面必须加','号
  5. #
  6. # 功能说明:
  7. # 和list类似,但元组中的元素不允许被修改
  1. # ================================
  2. a = (1, "python", 3.14)
  3. b = ("python",)
  4. c = (a, b)
  5. print(a)
  6. print(b)
  7. print(c)
  8. print(a[1])
  9. try:
  10. a[1] = "string" # 这里开始会报错
  11. except TypeError:
  12. print("TypeError")
  13. # 输出
  14. (1, 'python', 3.14)
  15. ('python',)
  16. ((1, 'python', 3.14), ('python',))
  17. python
  18. TypeError
  19. # ================================

常用方法

元组转列表 :list( )

L -序列容器(有序数据结构) - 图3

  1. # 因为元组通常只能用于查询,不能修改
  2. # 如果需要对元组进行修改只能线转成list后再进行操作
  1. # 示例
  2. a = (1, "python", 3.14)
  3. a = list(a)
  4. print(type(a))
  5. # 输出
  6. <class 'list'>

列表 [ List ]

列表很像,C\C++等编程语言中的数组,只是在Python每个元素储存的数据类型可以是任意的
甚至在List中可以套容器
L -序列容器(有序数据结构) - 图4


列表定义

L -序列容器(有序数据结构) - 图5

  1. [value0, value1, value2]
  2. # 定义一个列表List:
  3. # 用"[]"括起来,每个元素用','号隔开即可
  4. # 如果列表只有一个元素,第一个元素后面必须加','号
  5. #
  6. # 功能说明:
  7. # 与元组不同,list中的每个元素都可以修改
  1. # ================================
  2. # 示例
  3. a = [1, "python", 3.14]
  4. b = ["python",]
  5. c = [a, b]
  6. print(a)
  7. print(b)
  8. print(c)
  9. print(a[1])
  10. a[1] = "string"
  11. print(a[1])
  12. # 输出
  13. [1, 'python', 3.14]
  14. ['python']
  15. [[1, 'python', 3.14], ['python']]
  16. pythong
  17. string
  18. # ================================

常用操作、方法

——————-修改———————


修改列表 :L = [value0, value1, value2…]

修改元素值 :L[index] = value

列表合并 :L1+L2

L -序列容器(有序数据结构) - 图6

  1. # 示例
  2. a = [1, "python", 3.14] # 定义列表
  3. b = [1,2,3]
  4. a = ["Hibari", 6666, True] # 修改列表
  5. a[1] = "CN" # 修改元素值
  6. print(a)
  7. print(a+b)
  8. # 输出
  9. ['Hibari', 'CN', True]
  10. ['Hibari', 'CN', True, 1, 2, 3]


列表赋值 :List2 = List1[:]

  1. # 这是赋值地址,不是传递列表
  2. # 会导致1个列表2个名字
  3. List2 = List1
  1. # 正确的列表赋值方式
  2. # 赋值整个列表值
  3. List2 = List1[:]

—————-删除元素——————


按下标删除 :del L[index]

L -序列容器(有序数据结构) - 图7

  1. del L[index]
  2. # 参数说明
  3. # L 列表
  4. # index 整数(下标)
  5. #
  6. # 功能说明
  7. # 删除指定元素
  1. # 示例
  2. a = [True, "Hello", "World", 3.14]
  3. a[-1]
  4. a[1]
  5. print(a)
  6. # 输出
  7. [True, 'World']

按下标删除 :pop( )

L -序列容器(有序数据结构) - 图8

  1. L.pop(index)
  2. # 参数说明
  3. # L 列表(进行删除操作的列表)
  4. # index 整数(删除的元素下标)
  5. #
  6. # 功能说明
  7. # 删除指定元素
  1. # ================================
  2. # 示例
  3. a = [True, "Hello", "World", 3.14]
  4. a.pop()
  5. a.pop(1)
  6. print(a)
  7. # 输出
  8. [True, 'World']
  9. # ================================

按元素值删除:remove( )

L -序列容器(有序数据结构) - 图9

  1. L.remove(value)
  2. # 参数说明
  3. # L: 列表(进行删除操作的列表)
  4. # value: 值(需要删除的元素所含的值)
  5. #
  6. # 返回值
  7. # remove(): 无返回值
  8. # L: 列表(返回已经删除过的列表)
  9. #
  10. # 功能说明
  11. # 找到含有"x"的元素,并把这个元素删除
  12. # 但一次只能删除一个,如果要删除全部,需要比较复杂的操作
  1. # 示例1:
  2. a = ["Hello", "Hello", "World"]
  3. a.remove("Hello")
  4. # 输出
  5. ['Hello', 'World']
  1. # 示例2:利用异常ValueError
  2. a = ["Hello", "Hello", "World"]
  3. n = len(a)
  4. for i in range(n):
  5. try:
  6. a.remove("Hello")
  7. except ValueError:
  8. break
  9. print(a)
  10. # 输出
  11. ['World']

——————-添加———————


队尾添加 :append( )

L -序列容器(有序数据结构) - 图10

  1. L.append(object)
  2. # 参数说明:
  3. # object: 字符串\数值\序列 (向序列的队尾添加一个元素)
  4. # L: 序列(需要添加元素的序列)
  5. #
  6. # 返回值:
  7. # append(): 无返回值
  8. # L: 序列(返回添加完成后的序列)
  1. # ================================
  2. # 示例
  3. a = [1, "python", 3.14]
  4. a.append(True)
  5. print(a)
  6. # 输出
  7. [1, 'python', 3.14, True]
  8. # ================================

指定位置添加 :insert( )

L -序列容器(有序数据结构) - 图11

  1. L.insert(index, object)
  2. # 参数说明:
  3. # index: 整数(需要插入位置的元素下标)
  4. # object: 字符串\数值\序列(需要添加的元素)
  5. #
  6. # 返回值
  7. # insert(): 无返回值
  8. # L: 序列(返回添加完成后的序列)
  1. # ================================
  2. # 示例
  3. a = [1, "python", 3.14]
  4. a.insert(1, True)
  5. print(a)
  6. # 输出
  7. [1, True, 'python', 3.14]
  8. # ================================


队尾添加列表 :extend( )

L -序列容器(有序数据结构) - 图12

  1. L.extend(iterable)
  2. # 参数说明:
  3. # L: 序列(被追加的列表)
  4. # iterable: 序列(需要追加的内容)
  5. #
  6. # 返回值:
  7. # extend(): 无返回值
  8. # L: 序列(追加后的序列)
  1. # ================================
  2. # 示例
  3. a = [1, "pythong", 3.14]
  4. b = ["Hello", "World"]
  5. a.extend(b)
  6. print(a)
  7. # 输出
  8. [1, 'pythong', 3.14, 'Hello', 'World']
  9. # ================================
  1. L1+L2
  2. # 用加法运算符也能达到同样的效果
  1. # 示例
  2. a = [1, "python", 3.14]
  3. b = [1,2,3]
  4. print(a+b)
  5. # 输出
  6. ['Hibari', 'CN', 1, 2, 3]

——————-其他———————


长度查询 :len( )

L -序列容器(有序数据结构) - 图13

  1. len(object)
  2. # 参数说明:
  3. # object: 字符串/序列(查询的字符串,或者序列)
  4. #
  5. # 返回值:
  6. # len(): 整数(返回字符串的长度,或序列中元素的个数)
  1. # ================================
  2. # 示例
  3. a = (1, "pythong", 3.14)
  4. s = "Hello World"
  5. print(len(a))
  6. print(len(s))
  7. # 输出
  8. 3
  9. 11
  10. # ================================

元素排序 :sort( )

L -序列容器(有序数据结构) - 图14

  1. L.sort(key=None, reverse=False)
  2. # 参数说明:
  3. # L: 列表
  4. # reverse: 布尔(True降序,False升序)
  5. # key: 函数名(可以自定义一些排序规则)
  6. #
  7. # 功能说明:
  8. # 对元素进行排列
  1. # ================================
  2. # 示例
  3. a = [0, 9, 1, 8, 2, 7, 3, 6, 5]
  4. a.sort()
  5. print(a)
  6. a.sort(reverse=True)
  7. # 输出
  8. [0, 1, 2, 3, 5, 6, 7, 8, 9]
  9. [9, 8, 7, 6, 5, 3, 2, 1, 0]
  10. # ================================
  11. # ================================
  12. # 示例2 自定义排序
  13. a = [(a, 4), (b, 1), (c, 2), (d, 3)]
  14. # a[] 表示列表
  15. # a[][] 表示元组
  16. # a[x][0]表示元组中第一个元素
  17. # a[x][1]表示元组中第二给元素
  18. a = [('a', 4), ('b', 1), ('c', 2), ('d', 3)]
  19. a.sort(key = lambda x:x[0] , reverse=True)
  20. print(a)
  21. a.sort(key = lambda x:x[1] , reverse=True)
  22. print(a)
  23. #输出
  24. [('d', 3), ('c', 2), ('b', 1), ('a', 4)]
  25. [('a', 4), ('d', 3), ('c', 2), ('b', 1)]
  26. # ================================
  27. # ================================
  28. # 示例3 自定义排序(和上面的是一样的)
  29. a = [('a', 4), ('b', 1), ('c', 2), ('d', 3)]
  30. def f(x):
  31. x=x[0]
  32. return x
  33. def f2(x):
  34. x=x[1]
  35. return x
  36. a.sort(key = f , reverse=True)
  37. print(a)
  38. a.sort(key = f2 , reverse=True)
  39. print(a)
  40. #输出
  41. [('d', 3), ('c', 2), ('b', 1), ('a', 4)]
  42. [('a', 4), ('d', 3), ('c', 2), ('b', 1)]
  43. # ================================
  1. # 为了探究key就是个啥,我写了一个这样的代码
  2. # ================================
  3. a = [('a', 4), ('b', 1), ('c', 2), ('d', 3)]
  4. def f(x):
  5. print(x)
  6. x=x[0]
  7. print(x[0])
  8. return x
  9. a.sort(key = f , reverse=True)
  10. #输出
  11. ('a', 4)
  12. a
  13. ('b', 1)
  14. b
  15. ('c', 2)
  16. c
  17. ('d', 3)
  18. d
  19. # ================================
  20. sort方法会对列表进行一次遍历,
  21. Key会依次取列表的一个元素作为'X'进行判断,
  22. 但在该案例中'x'是一个元组,不能直接进行判断
  23. 而元组中的元素可以直接用于判断,故取'x[i]'
  24. 其目的就是为了找一个可以进行判断大小的值

列表切片 :list[ ]

L -序列容器(有序数据结构) - 图15

  1. L[start: end: step]
  2. # 参数说明:
  3. # L: 列表(切片的列表)
  4. # start: 整数(起始位置,注意这里的首位是1)(下标:start-1)
  5. # end: 整数(末尾位置)(下标:end)
  6. # [step]: 整数(步长,隔几个元素保留一次)(默认1)
  7. #
  8. # 功能说明:
  9. # 可以选取列表中的一个片段,变成一个新的列表
  10. # [:y] 表示从第 '0' 个开始,到第 'y-1' 个结束
  11. # [x:] 表示从第 'x' 个开始,到第 '最后一个' 个结束
  12. # [x:y] 表示从第 'x' 个开始,到第 'y-1' 个结束
  13. # [x:y:k] 表示从第 'x' 个开始,到第 'y-1' 个结束,每间隔 'K-1' 个保留其他舍弃
  1. # ================================
  2. # 示例
  3. a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  4. a1 = a[: 5]
  5. a2 = a[5: ]
  6. a3 = a[3: 8]
  7. a4 = a[ : : 2]
  8. print(a1)
  9. print(a2)
  10. print(a3)
  11. print(a4)
  12. # 输出
  13. [0, 1, 2, 3, 4]
  14. [5, 6, 7, 8, 9]
  15. [3, 4, 5, 6, 7]
  16. [0, 2, 4, 6, 8]
  17. # ================================