Python数据容器

打印 上一主题 下一主题

主题 1811|帖子 1811|积分 5433

定义:一种可以容纳多份数据的数据类型,容纳的每一份数据称之为1个元素每一个元素,可以是任意类型的数据,如字符串、数字、布尔等。
数据容器根据特点的不同,如:是否支持重复元素是否可以修改是否有序,平分为5类,分别是:列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)
列表(list)

根本语法:

  1. 变量名称=[元素1,元素2,元素3,元素4,……]
  2. 变量名称=[]
  3. 变量名称=list()
  4. 列表内每个数据,成为元素,用逗号隔开。
复制代码
注意:列表可以一次存储多个数据,也可以为不同的数据类型,支持嵌套。
  1. name_list = ['张三','李四','王五']
  2. print(name_list)
  3. print(type(name_list))
  4. my_list = ['Python',555,True]
  5. print(my_list)
  6. print(type(my_list))
  7. lists = [[1,2,3],[4,5,6]]
  8. print(lists)
  9. print(type(lists))
  10. 输出结果:
  11. D:\Study\PythonManage\.venv\Scripts\python.exe D:\Study\PythonManage\Demo\Demo1.py
  12. ['张三', '李四', '王五']
  13. <class 'list'>
  14. ['Python', 555, True]
  15. <class 'list'>
  16. [[1, 2, 3], [4, 5, 6]]
  17. <class 'list'>
复制代码
列表获取特定位置的数据:

列表的索引,列表索引共有两种方式,如下所示:

如图,列表中的每一个元素,都有其位置下标索引,从前向后的方向,从0开始,依次递增。
我们只需要按照下标索引,即可取得对应位置的元素。
或者,可以反向索引,也就是从后向前:从-1开始,依次递减(-1、-2、-3…)
如图,从后向前,下标索引为:-1、-2、-3,依次递减。
如果列表是嵌套的列表,同样支持下标索引,在通过索引获取值时,可直接标出 2 层索引即可

  1. name_list = ['张三','李四','王五']
  2. lists = [[1,2,3],[4,5,6]]
  3. print(name_list[0],name_list[1],name_list[2])
  4. print(name_list[-1],name_list[-2],name_list[-3])
  5. print(lists[0][2])
  6. 输出结果:
  7. D:\Study\PythonManage\.venv\Scripts\python.exe D:\Study\PythonManage\Demo\Demo1.py
  8. 张三 李四 王五
  9. 王五 李四 张三
  10. 3
复制代码
如果使用的索引不在列表中,python 会提示错误:IndexError: list index out of range
列表的常用操纵

列表的常用操纵包括:插入元素、删除元素、清空列表、修改元素、统计元素个数 、查询元素下标

  1. name_list = ['张三','李四','王五']
  2. lists = [1,2,3]
  3. #查找某元素的下标  index()
  4. print(name_list.index('李四'))
  5. #修改元素数值  直接对指定小标的值进行赋值即可
  6. name_list[0] = '孙六'
  7. print(name_list)
  8. """
  9. 插入元素
  10. insert()方法:在指定下标位置,插入指定元素
  11. append()方法:将指定元素追加到列表最后位置
  12. extend(其他数据容器)方法:将其他数据容器的内容取出,依次追加到列表最后位置
  13. """
  14. name_list.insert(1,'张三')
  15. print(name_list)
  16. name_list.append('赵二')
  17. print(name_list)
  18. name_list.extend(lists)
  19. print(name_list)
  20. """
  21. 删除元素:del 列表[下标]、列表.pop(下标),删除某位置的列表数据
  22. """
  23. del name_list[0]
  24. print(name_list)
  25. name_list.pop(-1)
  26. print(name_list)
  27. #列表.remove(元素) 删除元素在列表中的第一个匹配项
  28. lists.append(2)
  29. print(lists)
  30. lists.remove(2)
  31. print(lists)
  32. #清空列表内容
  33. lists.clear()
  34. print(lists)
  35. #统计某个元素在列表中个数
  36. print(name_list.count('张三'))
  37. #统计列表内内容个数 len()
  38. print(len(name_list))index = 0
  39. while index < len(列表):
  40.     元素 = 列表[index]
  41.     对元素进行处理
  42.     index+=1
  43. for 临时变量 in 数据容器(列表):
  44.     对临时变量进行处理
  45. 输出结果:
  46. D:\Study\PythonManage\.venv\Scripts\python.exe D:\Study\PythonManage\Demo\Demo1.py
  47. 1
  48. ['孙六', '李四', '王五']
  49. ['孙六', '张三', '李四', '王五']
  50. ['孙六', '张三', '李四', '王五', '赵二']
  51. ['孙六', '张三', '李四', '王五', '赵二', 1, 2, 3]
  52. ['张三', '李四', '王五', '赵二', 1, 2, 3]
  53. ['张三', '李四', '王五', '赵二', 1, 2]
  54. [1, 2, 3, 2]
  55. [1, 3, 2]
  56. []
  57. 1
复制代码
遍历列表

我们可以通过 while 循环或 for 循环对列表举行遍历
  1. index = 0
  2. while index < len(列表):
  3.     元素 = 列表[index]
  4.     对元素进行处理
  5.     index+=1
  6. for 临时变量 in 数据容器(列表):
  7.     对临时变量进行处理
复制代码
列表的特点:

可以容纳多个元素
可以容纳不同类型的元素(混装)
数据是有序存储的(有下标序号)
答应重复数据存在
可以修改(增加或删除元素等)
支持 for、while 循环
元组(tupe)

定义:定义元组使用小括号,且使用逗号隔开各个数据,数据可以是不同的数据类型。也支持嵌套
注意:元组一旦定义完成,就不能举行修改了,元组只有一个数据时,这个数据背面要加逗号
  1. name = ('张三')
  2. print(type(name))
  3. name = ('张三',)
  4. print(type(name))
  5. 输出结果:
  6. D:\Study\PythonManage\.venv\Scripts\python.exe D:\Study\PythonManage\Demo\Demo1.py
  7. <class 'str'>
  8. <class 'tuple'>
复制代码
元组的根本操纵


  1. name = ('张三','李四','王五','李四')
  2. #根据所以获取元组特定位置数据
  3. print(name[2])
  4. print(name[-3])
  5. #index() 获取元素的第一个匹配的位置
  6. print(name.index('李四'))
  7. #count() 统计某个数据在元组中出现的次数
  8. print(name.count('李四'))
  9. #len() 统计整个元组的数据个数
  10. print(len(name))
  11. 输出结果:
  12. D:\Study\PythonManage\.venv\Scripts\python.exe D:\Study\PythonManage\Demo\Demo1.py
  13. 王五
  14. 李四
  15. 1
  16. 2
  17. 4
复制代码
元组的遍历

同列表一样,元组也可以被遍历。可以使用while循环和for循环遍历它
元组的特点

可以容纳多个数据
可以容纳不同类型的数据(混装)
数据是有序存储的(下标索引)
答应重复数据存在
不可以修改(增加或删除元素等)
支持for、while 循环
字符串(str)

从容器方面来看,字符串是字符的容器,一个字符串可以放任意数目的字符
字符串的索引
和别的容器如:列表、元组一样,字符串也可以通过下标举行访问
从前向后,下标从0开始
从后向前,下标从-1开始
执字符串和元组一样,也是无法修改数据的容器,以是通过字符串 [0]=‘a’,remove(),pop(),append()等是不能举行修改的。
字符串的操纵


  1. my_str = 'Python is language'
  2. #index() 查找特定字符串的索引值
  3. print(my_str.index('is'))
  4. """
  5. 字符串的替换:字符串.replace(str1,str2)
  6. 将字符串内全部的str1,替换为str2
  7. 注意:这个操作是得到新的字符串,不是对字符串本身修改
  8. """
  9. newmy_str = my_str.replace('Python', 'Java')
  10. print(newmy_str)
  11. print(my_str)
  12. """
  13. 字符串的分割:字符串.split(分隔符)
  14. 按照指定的分隔符,将字符串换分为多个字符串,并存入列表对象中
  15. 注意:字符串本身不变,而是得到了一个列表对象
  16. """
  17. newstr = my_str.split(" ")
  18. print(newstr)
  19. print(my_str)
  20. #字符串.strip() 去除字符串前后的空格 strip还可分为lstrip()和rstrip()
  21. my_str = '  Python is language  '
  22. print(my_str.strip())
  23. print(my_str)
  24. #字符串.strip(前后指定字符串) 去除字符串前后指定的字符串,光去左或右跟strip()一样
  25. my_str = '12Python is language12'
  26. print(my_str.strip('12'))
  27. print(my_str)
  28. #统计某个字符从出现的次数 字符串.count(字符串)
  29. print(my_str.count('a'))
  30. #字符串的长度  len(字符串)
  31. print(len(my_str))
  32. 输出结果:
  33. D:\Study\PythonManage\.venv\Scripts\python.exe D:\Study\PythonManage\Demo\Demo1.py
  34. 7
  35. Java is language
  36. Python is language
  37. ['Python', 'is', 'language']
  38. Python is language
  39. Python is language
  40.   Python is language  
  41. Python is language
  42. 12Python is language12
  43. 2
  44. 22
复制代码
字符串的特点

只可以存储字符串
长度任意(取决于内存大小)
支持下标索引
答应重复字符串存在
不可以修改(增加或删除元素等)
支持for、while 循环
序列的切片

序列是指:内容连续、有序,可使用下标索引的一类数据容器
列表、元组、字符串,均可以可以视为序列。

如图,序列的典型特征就是:有序并可用下标索引,字符串、元组、列表均满意这个要求。
序列的常用操纵-切片

序列支持切片,即:列表、元组、字符串,均支持举行切片操纵
切片:从一个序列中,取出一个子序列
语法:序列[起始下标:竣事下标:步长]
表现从序列中,从指定位置开始,依次取出元素,到指定位置竣事,得到一个新序列:
        起始下标表现从何处开始,可以留空,留空视作从头开始
        竣事下标(不含)表现何处竣事,可以留空,留空视作截取到结尾
            步长表现,依次取元素的隔断
            步长1表现,一个个取元素
            步长2表现,每次跳过1个元素取
            步长N表现,每次跳过N-1个元素取
            步长为负数表现,反向取(注意,起始下标和竣事下标也要反向标记)
注意:此操纵不会影响序列自己,而是会得到一个新的序列(列表、元组、字符串)
  1. my_list = [1, 2, 3,4,5]
  2. new_list = my_list[1:4]   # 下标1开始,下标4(不含)结束,步长1
  3. print(new_list)
  4. my_tuple = (1,2,3,4,5)
  5. new_tuple = my_tuple[:]   #从头开始,到最后结束,步长1
  6. print(new_tuple)
  7. new_list = my_list[::2]   # 从头开始,到最后结束,步长2
  8. print(new_list)
  9. my_str = "12345"
  10. new_str = my_str[:4:2]    # 从头开始,到下标4(不含)结束,步长2
  11. print(new_str)
  12. new_str = my_str[::-1]   # 从头(最后)开始,到尾结束,步长-1(倒序)
  13. print(new_str)
  14. new_list = my_list[3:1:-1]  # 从下标3开始,到下标1(不含)结束,步长-1(倒序)
  15. print(new_list)
  16. new_tuple = my_tuple[:1:-2]  # 从头(最后)开始,到下标1(不含)结束,步长-2(倒序)
  17. print(new_tuple)
  18. 输出结果:
  19. D:\Study\PythonManage\.venv\Scripts\python.exe D:\Study\PythonManage\Demo\Demo1.py
  20. [2, 3, 4]
  21. (1, 2, 3, 4, 5)
  22. [1, 3, 5]
  23. 13
  24. 54321
  25. [4, 3]
  26. (5, 3)
复制代码
集合(set)

根本语法

  1. 变量名称 = {元素,元素1,元素1,……元素1}
  2. 变量名称 = set()
  3. name = {'张三','李四','王五','李四'}
  4. print(name)
  5. 输出结果:
  6. D:\Study\PythonManage\.venv\Scripts\python.exe D:\Study\PythonManage\Demo\Demo1.py
  7. {'李四', '王五', '张三'}
复制代码
由上述结果可知,集合内部是去重且无序的
集合的根本操纵


  1. my_set = {"hello","world"}
  2. print(my_set)
  3. print("--------------------------------")
  4. #集合.add(元素)  新增集合元素,将指定元素加入集合内  同时集合本身被修改
  5. my_set.add("python")
  6. print(my_set)
  7. print("--------------------------------")
  8. #集合.remove()  将指定元素从集合中移除  同时集合本身被修改
  9. my_set.remove("world")
  10. print(my_set)
  11. print("--------------------------------")
  12. #集合.pop() 从集合中随机取出一个元素  会得到一个元素的结果。同时集合本身被修改,元素被移除
  13. my_set.pop()
  14. print(my_set)
  15. print("--------------------------------")
  16. #集合.clear() 清空集合
  17. my_set.clear()
  18. print(my_set)
  19. print("--------------------------------")
  20. """
  21. 取出2个集合的差集
  22. 集合1.difference(集合2),功能:取出集合1和集合2的差集(集合1有而集合2没有的)
  23. 得到一个新集合,集合1和集合2不变
  24. """
  25. set1 = {1,2,3,5}
  26. set2 = {4,5,6,7}
  27. set3 = set1.difference(set2)
  28. print(set1)
  29. print(set2)
  30. print(set3)
  31. print("--------------------------------")
  32. """
  33. 消除2个集合的差集
  34. 集合1.difference_update(集合2)
  35. 对比集合1和集合2,在集合1内,删除和集合2相同的元素。
  36. 集合1被修改,集合2不变
  37. """
  38. set1.difference_update(set2)
  39. print(set1)
  40. print(set2)
  41. print("--------------------------------")
  42. """
  43. 2个集合合并
  44. 集合1.union(集合2)
  45. 将集合1和集合2组合成新集合
  46. 得到新集合,集合1和集合2不变
  47. """
  48. set1 = {1,2,3,5}
  49. set2 = {4,5,6,7}
  50. set3 = set1.union(set2)
  51. print(set1)
  52. print(set2)
  53. print(set3)
  54. print("--------------------------------")
  55. #查看集合的元素数量 len()
  56. print(len(set3))
  57. 输出结果:
  58. D:\Study\PythonManage\.venv\Scripts\python.exe D:\Study\PythonManage\Demo\Demo1.py
  59. {'world', 'hello'}
  60. --------------------------------
  61. {'world', 'python', 'hello'}
  62. --------------------------------
  63. {'python', 'hello'}
  64. --------------------------------
  65. {'hello'}
  66. --------------------------------
  67. set()
  68. --------------------------------
  69. {1, 2, 3, 5}
  70. {4, 5, 6, 7}
  71. {1, 2, 3}
  72. --------------------------------
  73. {1, 2, 3}
  74. {4, 5, 6, 7}
  75. --------------------------------
  76. {1, 2, 3, 5}
  77. {4, 5, 6, 7}
  78. {1, 2, 3, 4, 5, 6, 7}
  79. --------------------------------
  80. 7
复制代码
集合的特点

可以容纳多个数据
可以容纳不同类型的数据(混装)
数据是无序存储的(不支持索引)
不答应重复数据存在
可以修改(增加或删除元素等)
支持for循环,不支持 while 循环
字典(dict)

定义和语法

字典同样使用{},不外存储的元素是一个个的:键值对
  1. my_dict = {key:value,key:value,key:value……}
  2. my_dict = {}
  3. my_dict = dict()
复制代码
语法:
使用{}存储原始,每一个元素是一个键值对
每一个键值对包含Key和Value(用冒号分隔)
键值对之间使用逗号分隔
Key和Value可以是任意类型的数据(key不可为字典)
Key不可重复,重复会对原有数据覆盖
字典同集合一样,不可以使用索引,但是字典可以通过Key值来取得对应的Value
字典的Key和Value可以是任意数据类型(Key不可为字典)
字典的常用操纵


  1. my_scors = {"张三":"77","李四":"88","王五":"99"}
  2. print(my_scors)
  3. print("--------------------------------------------")
  4. # 新增元素         字典[Key] = Value,结果:字典被修改,新增了元素
  5. my_scors["赵六"] = 100
  6. print(my_scors)
  7. print("--------------------------------------------")
  8. #更新元素   语法:字典[Key] = Value,结果:字典被修改,元素被更新
  9. #字典Key不可以重复,所以对已存在的Key执行上述操作,就是更新Value值
  10. my_scors["张三"] = 85
  11. print(my_scors)
  12. print("--------------------------------------------")
  13. #删除元素 字典.pop(Key),结果:获得指定Key的Value,同时字典被修改,指定Key的数据被删除
  14. my_scors.pop("赵六")
  15. print(my_scors)
  16. print("--------------------------------------------")
  17. #清空字典 字典.clear(),结果:字典被修改,元素被清空
  18. my_scors.clear()
  19. print(my_scors)
  20. print("--------------------------------------------")
  21. #获取全部的Key  字典.keys(),结果:得到字典中的全部Key
  22. my_scors = {"张三":"77","李四":"88","王五":"99"}
  23. keys = my_scors.keys()
  24. print(keys)
  25. print("--------------------------------------------")
  26. #遍历字典 for key in 字典.keys()
  27. for key in keys:
  28.     print(key)
  29. print("--------------------------------------------")
  30. #计算字典内的全部元素(键值对)数量 len(字典) 得到一个整数,表示字典内元素(键值对)的数量
  31. print(len(my_scors))
  32. 输出结果:
  33. D:\Study\PythonManage\.venv\Scripts\python.exe D:\Study\PythonManage\Demo\Demo1.py
  34. {'张三': '77', '李四': '88', '王五': '99'}
  35. --------------------------------------------
  36. {'张三': '77', '李四': '88', '王五': '99', '赵六': 100}
  37. --------------------------------------------
  38. {'张三': 85, '李四': '88', '王五': '99', '赵六': 100}
  39. --------------------------------------------
  40. {'张三': 85, '李四': '88', '王五': '99'}
  41. --------------------------------------------
  42. {}
  43. --------------------------------------------
  44. dict_keys(['张三', '李四', '王五'])
  45. --------------------------------------------
  46. 张三
  47. 李四
  48. 王五
  49. --------------------------------------------
  50. 3
复制代码
字典的特点

可以容纳多个数据
可以容纳不同类型的数据
每一份数据是KeyValue键值对
可以通过Key获取到Value,Key不可重复(重复会覆盖)
不支持索引
可以修改(增加或删除更新元素等)
支持for循环,不支持while循环
数据容器对比总结

数据容器可以从以下视角举行简朴的分类:
是否支持索引:
支持:列表、元组、字符串 - 序列类型
不支持:集合、字典 - 非序列类型
是否支持重复元素:
支持:列表、元组、字符串 - 序列类型
不支持:集合、字典 - 非序列类型
是否可以修改
支持:列表、集合、字典
不支持:元组、字符串

容器通用排序功能

sorted(容器, [reverse=True]) 将给定容器举行排序,排序后都会得到 list 对象
  1. my_list = [1,3,4,5]
  2. my_tuple = (1,3,4,5)
  3. my_set = {1,3,4,5}
  4. my_str = '1345'
  5. my_dict = {'a':1,'b':3,'c':2}
  6. print("-------------------list-----------------")
  7. print(type(my_list))
  8. my_list = sorted(my_list,reverse=True)
  9. print(my_list)
  10. print(type(my_list))
  11. print("-------------------tuple-----------------")
  12. print(type(my_tuple))
  13. my_tuple = sorted(my_tuple,reverse=True)
  14. print(my_tuple)
  15. print(type(my_tuple))
  16. print("-------------------set-----------------")
  17. print(type(my_set))
  18. my_set = sorted(my_set,reverse=True)
  19. print(my_set)
  20. print(type(my_set))
  21. print("-------------------dict-----------------")
  22. print(type(my_dict))
  23. my_dict = sorted(my_dict,reverse=True)
  24. print(my_dict)
  25. print(type(my_dict))
  26. print("-------------------str-----------------")
  27. print(type(my_str))
  28. my_str = sorted(my_str,reverse=True)
  29. print(my_str)
  30. print(type(my_str))
  31. 输出结果:
  32. D:\Study\PythonManage\.venv\Scripts\python.exe D:\Study\PythonManage\Demo\Demo1.py
  33. -------------------list-----------------
  34. <class 'list'>
  35. [5, 4, 3, 1]
  36. <class 'list'>
  37. -------------------tuple-----------------
  38. <class 'tuple'>
  39. [5, 4, 3, 1]
  40. <class 'list'>
  41. -------------------set-----------------
  42. <class 'set'>
  43. [5, 4, 3, 1]
  44. <class 'list'>
  45. -------------------dict-----------------
  46. <class 'dict'>
  47. ['c', 'b', 'a']
  48. <class 'list'>
  49. -------------------str-----------------
  50. <class 'str'>
  51. ['5', '4', '3', '1']
  52. <class 'list'>
复制代码
通用功能


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81429

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表