今天想先总结一下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'}