Python之路-(列表元组字典集合)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python之路-(列表元组字典集合)相关的知识,希望对你有一定的参考价值。
一、列表
序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
Python有6个序列的内置类型,但最常见的是列表和元组。
序列都可以进行的操作包括索引,切片,加,乘,检查成员。
此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。
列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。
列表的数据项不需要具有相同的类型
#取值、切片
names = ["zhangsan","lisi","wangwu","chenliu"] print (names) #取所有列值 print (names[0],names[2]) #取值 print (names[0:3]) #切片,第一个值至第三个值 print (names[:3]) #0不写默认是0,切片,第一个值至第三个值 print (names[-1]) #取最后的值或者倒数第一个-2就是倒数第二个 print (names[-3:-1]) #倒数从左往右取值,顾首不顾尾
#添加、插入、修改、删除、查找、统计
#添加 names.append("xiaqi") #在最后面添加一个值 #插入 names.insert(1,"caoba") #在1的后面插入一个值,一定要输入在哪个值后面插入 #修改 names[2] ="xiaowang" #在下标为2修改值,根据下标修改值 #删除 1、根据值删除 names.remove("caoba") 2、根据下标删除 del names[1] 3、删除最后一个 names.pop() #删除最后一个,输出下标就删除下标 跟这个一样 del names[-1] #查找下标 print(names.index("zhangsan")) #找值的下标 print(names [names.index("zhangsan")] ) # 查找下标后打印下标内容 #统计 print(names.count("chenliu")) #统计相同的值数量
#清空列表、翻转列表、排序列表、扩展列表
#清空列表 names.clear() #翻转列表 number=[1,2,3,4,5,1,1] number.reverse() print(number) [1, 1, 5, 4, 3, 2, 1] #排序列表 number=[1,2,3,4,5,1,1] number.sort() #扩展列表 names2 = [1,2,3,4] names.extend(names2)
#浅复制列表
names=[‘zhangsan‘,‘lisi‘,‘wangwu‘] names2 = names.copy() print(names) print(names2) [‘zhangsan‘, ‘lisi‘, ‘wangwu‘] [‘zhangsan‘, ‘lisi‘, ‘wangwu‘] names=[‘zhangsan‘,‘lisi‘,‘wangwu‘,[‘jonny‘]] names2 = names.copy() print(names) print(names2) [‘zhangsan‘, ‘lisi‘, ‘wangwu‘, [‘jonny‘]] [‘zhangsan‘, ‘lisi‘, ‘wangwu‘, [‘jonny‘]] names[2] = ‘王五‘ names [3] [0] = ‘JONNY‘ print(names) print(names2) #name2 只复制第一层的列表,不会复制第二层列表,也就是子列表 [‘zhangsan‘, ‘lisi‘, ‘王五‘, [‘JONNY‘]] #names 修改的是第二层,然后wangwu变成了中文也是第二层 [‘zhangsan‘, ‘lisi‘, ‘wangwu‘, [‘JONNY‘]] #但是names2是复制第一层,所以第一层是没有中文的王五,而jonny被改成了大写也是因为不复制,第二层也就是子列表。 浅复制的三种方式: import copy person=[‘name‘,[‘a‘,100]] p1=copy.copy(person) p2=person[:] p3=list(person)
#深复制列表
import copy names=[‘zhangsan‘,‘lisi‘,‘wangwu‘,[‘jonny‘]] names2 = copy.deepcopy(names) print(names) print(names2) names[2] = ‘王五‘ names [3] [0] = ‘JONNY‘ print(names) print(names2) [‘zhangsan‘, ‘lisi‘, ‘wangwu‘, [‘jonny‘]] [‘zhangsan‘, ‘lisi‘, ‘wangwu‘, [‘jonny‘]] [‘zhangsan‘, ‘lisi‘, ‘王五‘, [‘JONNY‘]] [‘zhangsan‘, ‘lisi‘, ‘wangwu‘, [‘jonny‘]]
二、元组
元组与列表类似,元组一旦创建即不可修改。
元组使用小括号,列表使用方括号。
元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。
Names=(‘name‘,‘jonny‘)
只有两种方法:
1、index 查找下标
2、count 统计
三、字典
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,
键必须是唯一的,但值则不必。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
#创建一个新字典,同时赋值。
c = dict.fromkeys([6,7,8],[1,{‘name‘:‘alex‘},444]) print(c) c[7][1][‘name‘]=‘Jack Chen‘ #会直接修改连接地址,所有name值全部都会修改。 print(c) {8: [1, {‘name‘: ‘alex‘}, 444], 6: [1, {‘name‘: ‘alex‘}, 444], 7: [1, {‘name‘: ‘alex‘}, 444]} {8: [1, {‘name‘: ‘Jack Chen‘}, 444], 6: [1, {‘name‘: ‘Jack Chen‘}, 444], 7: [1, {‘name‘: ‘Jack Chen‘}, 444]}
#修改、查、删除
#修改,存在则修改,不存在则创建 info = { ‘stu1101‘: ‘zhang san‘, ‘stu1102‘: ‘li si‘, ‘stu1103‘: ‘wang wu‘, } b = { ‘stu1101‘: ‘xiaxia‘, #对应info的key stu1101值不一样,则被修改 1:3, #无对应key 则新增 4:2 #无对应key 则新增 } info.update(b) #修改info字典,对应的key有值就修改,无则新增 print(info) {1: 3, ‘stu1101‘: ‘xiaxia‘, 4: 2, ‘stu1102‘: ‘li si‘, ‘stu1103‘: ‘wang wu‘} #查 print(info.get(‘stu1101‘)) #如果没有该key 则返回None。 print(info[‘stu1101‘]) #直接打印key的值 #删除1 del info[‘stu1101‘] #删除2 info.pop(‘stu1104‘) #随机删除 info.popitem() #随机删除一个元素
#多级嵌套
school = { "大学":{ "www.nanjingdaxue.com": ["做夢吧","要求分数高"], "www.zhongshandaxue.com": ["醒醒吧","要求分数高"], "qinghuadaxue.com": ["不可能的","要求分数高"], "beijingdaxue.com":["难进","要求分数高"] }, "高中":{ "sihui":["轻松","收费低"] }, "初中":{ "weizheng":["容易","免费"] } } #修改 school[‘高中‘][‘sihui‘][1] = ‘毫不費力‘ #只打印key print(school.keys()) #只打印值 print(school.values()) #嵌套循环打印 for i in school: print(i,school[i])
#字典转换列表
#把字典转换为列表 print(info.items()) #字典转列表然后再循环 for k,v in info.items(): print(k,v)
四、集合
集合(set)是一个无序不重复元素的序列。
基本功能是进行成员关系测试和删除重复元素。
可以使用大括号({})或者 set()函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
list_1 = [1,1,3,4,5,6] list_1 = set(list_1) #打印类型 print(list_1,type(list_1)) list_2 = set([2,3,4,7,9]) print(list_2) print(list_1,list_2) #交集 .intersection print(list_1.intersection(list_2)) #取出交集 #并集 .union print(list_1.union(list_2)) #去重合并 #差集 .difference print(list_1.difference(list_2)) #保留list_1里面有的list_2里面没有的 #子集 .issubset list_3 = set([1,3,4]) print(list_3.issubset(list_1)) #list_1 包含list_3 的所有值,则返回Ture print(list_1.issuperset(list_3)) # 返回Flase #对称差集 .symmetric_difference print(list_1.symmetric_difference(list_2)) #把相互都没有的值取出来 #对比是否有交集,没有为True,有则False list_4 = set([5,6,7]) print(list_3.isdisjoint(list_4)) #没有交集为True 集合符号: #交集 print(list_2 & list_3) #并集 print(list_2 | list_3) #求差集 print(list_2 - list_3) #对称差集 print(list_2 ^ list_3) #添加 list_1.add(999) print(list_1) #添加多项 list_4.update([888,999,111]) #删除一项 list_4.remove(999) #集合长度 print(len(list_4)) #判断是不是成员 print(111 in list_4) #列表、字典、字符串、集合、元组判断是不是成员都是用in print(list_1.pop()) #任意删除一个 list_1.discard(‘4‘) #删除,没返回
以上是关于Python之路-(列表元组字典集合)的主要内容,如果未能解决你的问题,请参考以下文章
小菜鸡进阶之路_Second week之元组列表集合字典对比.
python-列表list- 元组(tuple)- 集合(set)-字典(dict)-实例代码