今天想先总结一下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] <class 'list'>
[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') <class 'tuple'>
['I', 'love', 'you'] <class 'list'>
(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': '男'} <class 'dict'>
{'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': '张三'}
<class 'dict'>
{'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'}