Python中的基本数据结构

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”的一个浅复制 

来自:http://www.cnblogs.com/alex3714/articles/5717620.html

猜你喜欢

转载自blog.csdn.net/hongsong673150343/article/details/86602331
今日推荐