python列表、元组、字典、集合区别及他们之间的转换(超全) |
您所在的位置:网站首页 › python元组列表字典集合的开辟 › python列表、元组、字典、集合区别及他们之间的转换(超全) |
今天想先总结一下python中数据结构区别以及他们之间能如何转换 1. 基本属性数据结构 列表(list) 元组(tuple) 字典(dict) 集合(set) 基本形式 [123, 'python', ('python', 123)] ('A','B','C','1') {'A':7,'B':1,'C':9} {123, 'python', ('python', 123)} 是否有序 是 是 否 否 是否可变 是 否 是 是 特征 键值唯一 元素不重复 添加 append,extend ,insert 不可修改 dic['key']=vaule add,update 删除 pop,remove pop pop,discard,remove 修改 list[index]=vaule dic['key']=vaule 其他 sort,reverse cmp get,items,values Intersection,union,difference,symmetric_difference 2. 数据结构之间的相互转换(1)字符串与列表的相互转换 #字符串转列表 print(list('I love you') ) str = "I love you" list2 = str.split(" ") print(list2) #列表转字符串 list3 = ['I', 'love', 'you'] str2 = "".join(list3) print(str2) str3 = ".".join(list3) print(str3) str4 = " ".join(list3) print(str4) # 将列表字符串转化为列表 #方法1 import ast data = "[1, 2, 3, 4, 5]" data_new = ast.literal_eval(data) print(data_new) #方法2 list3 = data.strip('[').strip(']').split(',') print(list3) list4 = [int(i) for i in list3] print(list4, type(list4)) #方法3 list5 = list(eval(data)) print(list5)输出为 ['I', ' ', 'l', 'o', 'v', 'e', ' ', 'y', 'o', 'u'] ['I', 'love', 'you'] Iloveyou I.love.you I love you [1, 2, 3, 4, 5] ['1', ' 2', ' 3', ' 4', ' 5'] [1, 2, 3, 4, 5] [1, 2, 3, 4, 5](2)列表与元组的相互转换 #列表转元组 li = [1, 2, 3] li2= ['I', 'love', 'you'] tu = tuple(li) tu2 = tuple(li2) print(tu,tu2, type(tu)) # 元组转列表 tu3 = ('I', 'love', 'you') li3 = list(tu3) print(li3, type(li))输出结果为: (1, 2, 3) ('I', 'love', 'you') ['I', 'love', 'you'](3)集合与列表的转换 # 列表转集合(去重) list1 = [6, 7, 7, 8, 8, 9] list2=["hello",1,1+3j,1,"2","3","2",3] s1 = set(list1) s2 = set(list2) print(s1,s2) #集合转列表 s3 = {0, 1, 3, 9, 5, 7, 45} list3 = list(s3) print(list3) # 列表去重,并保持原来列表的顺序 list1_1 = list(set(list1)) list2_1 = list(set(list2)) print(list1_1,list2_1) list1_1.sort(key = list1.index) list2_1.sort(key = list2.index) print(list1_1,list2_1)输出结果为: {8, 9, 6, 7} {1, 3, (1+3j), '2', '3', 'hello'} [0, 1, 3, 5, 7, 9, 45] [8, 9, 6, 7] [1, 3, (1+3j), '2', '3', 'hello'] [6, 7, 8, 9] ['hello', 1, (1+3j), '2', '3', 3](4)元组与集合的转换 与列表与集合的转换基本一致,要注意的是元组没有用来排序的sort函数,给元组排序可以先将元组转换为列表再进行排序。 (5)列表与字典的转换 #列表转字典 #方法1 list1 = ['name', 'age', 'sex'] list2 = ['张三', 18, '男'] list3 = ['张三', 18, '男', '大一'] dict1 = {} for i in range(len(list1)): dict1[list1[i]] = list2[i] print(dict1, type(dict1)) #方法2 dict2 = dict(zip(list1, list2)) dict3 = dict(zip(list1, list3)) #两个列表长度可以不一样 print(dict2,dict3) #方法3 嵌套列表转为字典 li1 = ['name','张三'] li2 = ['age',18] li3 = ['sex','男'] li4 = [li1,li2,li3] print(dict(li4)) # 相当于遍历子列表,如下 dict4 = {} for i in li4: dit[i[0]] = i[1] #方法4 元组列表转为字典 list4 = [('name', '张三'), ('age', 18), ('sex', '男')] dict5 = dict(list4) print(dict5) #字典转列表 #方法1 dict1 = {'name': '张三', 'age': 18, 'sex': '男'} list1 = list(dict1) print(list1) #list函数默认将字典中key取出 与下面等同 list2 = list(dict1.keys()) print(list2) list3 = list(dict1.values()) print(list3) list4 = list(dict1.items()) print(list4) #方法2 比较原始 lst_key=[] lst_value=[] for key,value in dict1.items(): lst_key.append(key) lst_value.append(value) print (lst_key) print (lst_value)输出结果如下: {'name': '张三', 'age': 18, 'sex': '男'} {'name': '张三', 'age': 18, 'sex': '男'} {'name': '张三', 'age': 18, 'sex': '男'} {'name': '张三', 'age': 18, 'sex': '男'} {'name': '张三', 'age': 18, 'sex': '男'} ['name', 'age', 'sex'] ['name', 'age', 'sex'] ['张三', 18, '男'] [('name', '张三'), ('age', 18), ('sex', '男')] ['name', 'age', 'sex'] ['张三', 18, '男'](6)元组和字典的转换 字典转换为元组与上面字典转换为列表一直,不同的是元组不能转成字典 (7)集合与字典的转换 #集合转换为字典 #两个集合zip list_keys = {'name', 'age', 'sex'} list_values = {'张三', 18, '男'} new_dict = dict(zip(list_keys, list_values)) print(new_dict) print(type(new_dict)) #有不同的键但每个键值相等 dict2 = dict.fromkeys(list_keys,'22') print(dict2) #等同于 dict3 = {i:'22' for i in list_keys} print(dict3) #字典转换为集合与字典转化为列表相似输出结果为: {'name': '男', 'sex': 18, 'age': '张三'} {'name': '22', 'sex': '22', 'age': '22'} {'name': '22', 'sex': '22', 'age': '22'}(8)字典key和value值转换 dict1 = {'name': '张三', 'age': 18, 'sex': '男'} dict2 = {value: key for key, value in dict1.items()} print(dict2)结果为: {'张三': 'name', 18: 'age', '男': 'sex'} |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |