Python中的基本数据结构
一、列表、元组操作
列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作。
定义列表
names = ['hongsong','yangyang','xielixiang']
通过下标访问列表中的元素,下标从0开始计数
print(names[0])
print(names[1])
print(names[2])
print(names[-1])
#以切片方式取多个元素
print(names[:3])
print(names[0:])
print(names[0:2])#右边界不包括
print(names[0::2])# ::后的2表示每隔一个元素取一个
print(names[::2])
输出:
hongsong
yangyang
xielixiang
Bob
['hongsong', 'yangyang', 'xielixiang']
['hongsong', 'yangyang', 'xielixiang', 'Tom', 'Bob']
['hongsong', 'yangyang']
['hongsong', 'xielixiang', 'Bob']
['hongsong', 'xielixiang', 'Bob']
追加
students = ['liming','zhangshan','wangwu']
students.append('yangyang')
print(students)
输出:
['liming', 'zhangshan', 'wangwu', 'yangyang']
插入
students.insert(1,'xiaoyu')
print(students)
输出:
['liming', 'xiaoyu', 'zhangshan', 'wangwu', 'yangyang']
修改
students[1] = 'hongsong'
print(students)
输出:
['liming', 'hongsong', 'zhangshan', 'wangwu', 'yangyang']
删除
li = ['limingbo','zhangjiayi','haoguier','liliao',123]
print(li)
del li[2]
print(li)
li.remove('zhangjiayi')#删除指定元素
print(li)
li.pop()#删除列表最后一个元素
print(li)
输出:
['limingbo', 'zhangjiayi', 'haoguier', 'liliao', 123]
['limingbo', 'zhangjiayi', 'liliao', 123]
['limingbo', 'liliao', 123]
['limingbo', 'liliao']
扩展
hs = ['haha','ok','yy']
print(hs)
hs.extend([123,'liqingqing'])
print(hs)
输出:
['haha', 'ok', 'yy']
['haha', 'ok', 'yy', 123, 'liqingqing']
拷贝
li = ['yy','hs','limingbo',258]
li_copy = li.copy()
print('li_copy-->',li_copy)
输出:
li_copy--> ['yy', 'hs', 'limingbo', 258]
统计
li = ['yy','hs','limingbo',258,'hs','hs']
cnt = li.count('hs')
print(cnt)
输出:
3
排序&翻转
li = ['yy','hs','limingbo',258,'hs','hs']
sot = li.sort()
print(sot)
输出:
TypeError: '<' not supported between instances of 'int' and 'str'
注意:不同的数据类型,不能排序。
li = ['yy','hs','limingbo','xielixiang']
li.sort()
print(li)
lii = [1,5,3,9,8,7,6]
lii.sort()
print(lii)
输出:
['hs', 'limingbo', 'xielixiang', 'yy']
[1, 3, 5, 6, 7, 8, 9]
反转
lii = [1,5,3,9,8,7,6]
lii.sort()
print(lii)
lii.reverse()
print(lii)
输出:
[1, 3, 5, 6, 7, 8, 9]
[9, 8, 7, 6, 5, 3, 1]
获取下标
lii = [1,5,3,9,'yy',8,7,6,5]
i = lii.index(5)#只返回找到的第一个下标
j = lii.index('yy')
print(i,j)
输出:
1 4
元组
元组其实跟列表差不多,只是它一旦创建,便不能再修改,所以又叫只读列表。
定义元组
names = ("Tom","jack","Bob")
它只有2个方法,一个是count,一个是index。
二、字符串操作
字符串的特性:不可修改
字符串常用操作
s = 'hsyyYsyS'
print(s.capitalize())#首字母大写
print(s.casefold())#大写全部变小写
print(s.center(30,'-'))#-----------hsyyYsyS-----------
print(s.zfill(20))#000000000000hsyyYsyS
print(s.ljust(20,'*'))#hsyyYsyS************
print(s.rjust(20,'*'))#************hsyyYsyS
print(s.count('y'))#统计y出现次数
print(type(s.encode()))#将字符串编码成bytes格式
print(s.endswith('S'))#判断字符串是否以S结尾
print('hs\tyy'.expandtabs(10))#将\t转换成空格,输出:hs yy
print(s.find('S'))#查找S,找到返回其索引,找不到返回-1
print(s.index('s'))#返回s所在字符串的索引
print('9aA'.isalnum())#判断该字符串是否是字母和数字的组合
print('9'.isdigit())#判断该字符串是否是整数
print('123466'.isnumeric())#判断该字符串是否是数字
print(' '.isspace())#判断该字符串是否是空格
print('Hs,Yy'.istitle())
print('KFHSFH'.isupper())#判断该字符串是否大写
输出:
Hsyyysys
hsyyysys
-----------hsyyYsyS-----------
000000000000hsyyYsyS
hsyyYsyS************
************hsyyYsyS
3
<class 'bytes'>
True
hs yy
7
1
True
True
True
True
True
swapcase–>将字符串中的大小写互换
s = 'HsSYyhh'
r = s.swapcase()#将字符串中的大小写互换
print(r)
输出:
hSsyYHH
title
li = 'hs,yy,haha'
s = li.title()
print(s)
输出:
Hs,Yy,Haha
format的用法
msg = "my name is {}, and age is {}"
s = msg.format("yy", 22)
print(s)
输出:
my name is yy, and age is 22
msg = "my name is {1}, and age is {0}"
s = msg.format(22,'hs')
print(s)
输出:
my name is hs, and age is 22
msg = "my name is {name}, and age is {age}"
s = msg.format(age=22, name="ale")
print(s)
输出:
my name is ale, and age is 22
format_map的用法
msg = "my name is {name}, and age is {age}"
s = msg.format_map({'name': 'yy', 'age': 22})
print(s)
输出:
my name is yy, and age is 22
join的用法
s = "**-**".join(['hs','yy','yyy'])
print(s)
输出:
hs**-**yy**-**yyy
三、 字典操作
字典是一种key - value 的数据类型,python中的字典是根据键去找对应的值,且字典的键是可哈希的。
语法:
info = {
'stu_1': "xiaomin",
'stu_2': "lihua",
'stu_3': "zhangqian",
}
字典的特性:• dict是无序的• key必须是唯一的
增加
info = {
'stu_1': "xiaomin",
'stu_2': "lihua",
'stu_3': "zhangqian",
}
info['stu_4'] = 'yangyang'
print(info)
输出:
{'stu_1': 'xiaomin', 'stu_2': 'lihua', 'stu_3': 'zhangqian', 'stu_4': 'yangyang'}
修改
info = {
'stu_1': "xiaomin",
'stu_2': "lihua",
'stu_3': "zhangqian",
}
info['stu_4'] = 'yangyang'
print(info)
info['stu_1'] = 'hongsong'
print(info)
输出:
{'stu_1': 'xiaomin', 'stu_2': 'lihua', 'stu_3': 'zhangqian', 'stu_4': 'yangyang'}
{'stu_1': 'hongsong', 'stu_2': 'lihua', 'stu_3': 'zhangqian', 'stu_4': 'yangyang'}
删除
标准删除方式:
info = {
'stu_1': "xiaomin",
'stu_2': "lihua",
'stu_3': "zhangqian",
}
info['stu_4'] = 'yangyang'
print(info)
info['stu_1'] = 'hongsong'
print(info)
info.pop('stu_1')
print(info)
输出:
{'stu_1': 'xiaomin', 'stu_2': 'lihua', 'stu_3': 'zhangqian', 'stu_4': 'yangyang'}
{'stu_1': 'hongsong', 'stu_2': 'lihua', 'stu_3': 'zhangqian', 'stu_4': 'yangyang'}
{'stu_2': 'lihua', 'stu_3': 'zhangqian', 'stu_4': 'yangyang'}
另一种删除方式
info = {
'stu_1': "xiaomin",
'stu_2': "lihua",
'stu_3': "zhangqian",
}
info['stu_4'] = 'yangyang'
print(info)
info['stu_1'] = 'hongsong'
print(info)
info.pop('stu_1')
print(info)
del info['stu_4']
print(info)
输出:
{'stu_1': 'xiaomin', 'stu_2': 'lihua', 'stu_3': 'zhangqian', 'stu_4': 'yangyang'}
{'stu_1': 'hongsong', 'stu_2': 'lihua', 'stu_3': 'zhangqian', 'stu_4': 'yangyang'}
{'stu_2': 'lihua', 'stu_3': 'zhangqian', 'stu_4': 'yangyang'}
{'stu_2': 'lihua', 'stu_3': 'zhangqian'}
以后进先出的顺序删除字典里的项
info = {
'k': "xiaomin",
'm': "lihua",
'l': "zhangqian",
'p': "Tom",
'd': "Bob",
'o': "Hery",
}
info.popitem()
print(info)
info.popitem()
print(info)
info.popitem()
print(info)
info.popitem()
print(info)
输出:
{'k': 'xiaomin', 'm': 'lihua', 'l': 'zhangqian', 'p': 'Tom', 'd': 'Bob'}
{'k': 'xiaomin', 'm': 'lihua', 'l': 'zhangqian', 'p': 'Tom'}
{'k': 'xiaomin', 'm': 'lihua', 'l': 'zhangqian'}
{'k': 'xiaomin', 'm': 'lihua'}
查找
info = {
'k': "xiaomin",
'm': "lihua",
'l': "zhangqian",
'p': "Tom",
'd': "Bob",
'o': "Hery",
}
print('m' in info) #标准用法
print(info.get('p'))#获取字典里的内容
输出:
True
Tom
多级字典嵌套及操作
# 多级字典(嵌套字典)
duoji_dict = {
'姚明':{
'身高':'2米26',
'体重': '400斤',
'特长':['篮球','跑步']
},
'汪涵':{
'身高':'1米75',
'体重': '150斤',
'特长':['主持','跑步']
},
'张杰':{
'身高':'1米79',
'体重': '140斤',
'特长':['篮球','跑步','唱歌']
}
}
print(duoji_dict)
# 访问多级字典:
print('姚明的体重为:', duoji_dict['姚明']['体重'])
# 修改姚明的体重为390
duoji_dict['姚明']['体重'] = '390斤'
print('减肥后的姚明体重为:', duoji_dict['姚明']['体重'])
# 新添张杰腰围100
duoji_dict['张杰']['腰围'] = '100cm'
print('张杰的腰围为:', duoji_dict['张杰']['腰围'])
# 多级字典删除
duoji_dict['汪涵'].pop('身高') # 标准删除
del duoji_dict['汪涵']['体重'] # 另一个删除方法
print('关于汪涵现在只剩下:', duoji_dict['汪涵'])
输出:
{'姚明': {'身高': '2米26', '体重': '400斤', '特长': ['篮球', '跑步']}, '汪涵': {'身高': '1米75', '体重': '150斤', '特长': ['主持', '跑步']}, '张杰': {'身高': '1米79', '体重': '140斤', '特长': ['篮球', '跑步', '唱歌']}}
姚明的体重为: 400斤
减肥后的姚明体重为: 390斤
张杰的腰围为: 100cm
关于汪涵现在只剩下: {'特长': ['主持', '跑步']}
其它操作
获取字典的values
info = {
'身高':'2米26',
'体重': '400斤',
'特长':['篮球','跑步']
}
v = info.values()
print(v)
输出:
dict_values(['2米26', '400斤', ['篮球', '跑步']])
获取字典的keys
info = {
'身高':'2米26',
'体重': '400斤',
'特长':['篮球','跑步']
}
k = info.keys()
print(k)
输出:
dict_keys(['身高', '体重', '特长'])
setdefault
dict_1 = {
'name':'huhu',
'age':36
}
r = dict_1.setdefault('age',45)#当原字典中有该键时,则不对原键值做改动,返回原来的键值。
print(r)
print(dict_1)
输出:当原字典中有该键时,则不对原键值做改动,返回原来的键值。
36
{'name': 'huhu', 'age': 36}
dict_2 = {
'name':'huhu',
'age':36
}
r = dict_2.setdefault('sex','male')#当原字典中无该键时,则新增该键和对应的值,并返回键值。
print(r)
print(dict_2)
输出:当原字典中无该键时,则新增该键和对应的值,并返回键值。
male
{'name': 'huhu', 'age': 36, 'sex': 'male'}
update
info = {
'name':'hs',
'age':23
}
print(info)
add = {'特长':'唱歌','体重':'110斤'}
info.update(add)
print(info)
输出:
{'name': 'hs', 'age': 23}
{'name': 'hs', 'age': 23, '特长': '唱歌', '体重': '110斤'}
items
info = {
'name':'hs',
'age':23
}
print(info.items())
输出:
dict_items([('name', 'hs'), ('age', 23)])
循环dict
info = {
'name':'hs',
'age':23
}
#方法1
for key in info:
print(key,info[key])
#方法2
for k,v in info.items(): #会先把dict转成list,数据里大时莫用
print(k,v)
输出:
name hs
age 23
name hs
age 23
四、集合操作
集合是一个无序的,不重复的数据组合,它的主要作用如下:
• 去重,把一个列表变成集合,就自动去重了
• 关系测试,测试两组数据之前的交集、差集、并集等关系
常用操作
s = set([3, 5, 9, 10]) # 创建一个数值集合
t = set("Hello") # 创建一个唯一字符的集合
a = t | s # t 和 s的并集
print(a)
b = t & s # t 和 s的交集
print(b)
c = t - s # 求差集(项在t中,但不在s中)
print(c)
d = t ^ s # 对称差集(项在t或s中,但不会同时出现在二者中)
print(d)
输出:
{'l', 3, 'o', 5, 9, 10, 'e', 'H'}
set()
{'l', 'H', 'o', 'e'}
{'l', 3, 5, 'o', 9, 10, 'e', 'H'}
基本操作:
t.add('x') # 添加一项
s.update([10,37,42]) # 在s中添加多项
使用remove()可以删除一项:
t.remove('H')
len(s)
set 的长度
x in s
测试 x 是否是 s 的成员
x not in s
测试 x 是否不是 s 的成员
s.issubset(t)
s <= t
测试是否 s 中的每一个元素都在 t 中
s.issuperset(t)
s >= t
测试是否 t 中的每一个元素都在 s 中
s.union(t)
s | t
返回一个新的 set 包含 s 和 t 中的每一个元素
s.intersection(t)
s & t
返回一个新的 set 包含 s 和 t 中的公共元素
s.difference(t)
s - t
返回一个新的 set 包含 s 中有但是 t 中没有的元素
s.symmetric_difference(t)
s ^ t
返回一个新的 set 包含 s 和 t 中不重复的元素
s.copy()
返回 set “s”的一个浅复制