Python原生数据结构

1.1 列表

列表是大小和内容都可以改变的序列对象,用[ ]括起来,一个列表中的元素可以是多种不同类型。

列表是一种序列,即每个列表元素都有一个自己的位置(索引);

1. 单索引

从0开始,支持正向和负向索引。

list1 = ['张三','男',33,'江苏','硕士','已婚',['身高178','体重72']]
print(list1[0])     # 取出第1个元素
print(list1[3])     # 取出第4个元素
print(list1[-1])    # 取出最后1个元素
print(list1[-1][1]) # 取出“体重72”这个值
张三
江苏
['身高178', '体重72']
体重72

2. 切片索引

[开始:结束:步长]

注意,不包含结束索引,即 [开始, 结束)。

默认步长为1;若无开始索引,则从0开始;若无结束索引,则直到末尾。

list2 = ['江苏','安徽','浙江','上海','山东','山西','湖南','湖北']
print(list2[2:6])    # 取出第3至6个元素, 索引是2-5
print(list2[1:6:2])  # 取出第2,4,6个元素
print(list2[-3:-1])  # 取出最后3个元素
['浙江', '上海', '山东', '山西']
['安徽', '上海', '山西']
['山西', '湖南']
print(list2[:3])    # 取出前3个元素
print(list2[-3:])   # 取出最后3个元素
print(list2[::])    # 取出所有元素
print(list2[::2])   # 取出奇数位置的元素
print(list2[1::2])  # 取出偶数位置的元素
['江苏', '安徽', '浙江']
['山西', '湖南', '湖北']
['江苏', '安徽', '浙江', '上海', '山东', '山西', '湖南', '湖北']
['江苏', '浙江', '山东', '湖南']
['安徽', '上海', '山西', '湖北']

3. 列表元素操作

列表也是对象,通过列表的方法可以对列表元素进行增加、删除、修改等操作。

(1) 列表元素的增加

方法:

append()——只能在列表末尾增加元素,且每次只能增加1个元素;

extend()——可以在列表末尾增加多个元素,注意增加的元素必须打包成列表的形式;

insert()——可以在列表指定位置插入元素或列表(该列表作为1个元素)。

list3 = [1,10,100,1000,10000]
list3.append(2)  # 在列表末尾添加数字2
print(list3)
list3.extend([20,200,2000,20000])  # 在列表末尾添加20,200,2000,20000四个值
print(list3)
[1, 10, 100, 1000, 10000, 2]
[1, 10, 100, 1000, 10000, 2, 20, 200, 2000, 20000]
list3.insert(2,11)  # 在索引2处插入11
print(list3)
list3.insert(6,['a','b','c'])  # 在索引6处插入['a','b','c']
print(list3)
[1, 10, 11, 100, 1000, 10000, 2, 20, 200, 2000, 20000]
[1, 10, 11, 100, 1000, 10000, ['a', 'b', 'c'], 2, 20, 200, 2000, 20000]

(2) 列表元素的删除

方法:

pop()——用来删除列表末尾或指定位置处的元素,且每次只能删除1个元素;

remove()——用来删除列表的指定值,若有多个该值,只删除第一个;

clear()——删除列表的全部元素,返回空列表。

list3.pop()   # 删除list3的最后1个元素
print(list3)
list3.pop(2)  # 删除list3中索引2处的元素
print(list3)
[1, 10, 11, 100, 1000, 10000, ['a', 'b', 'c'], 2, 20, 200, 2000]
[1, 10, 100, 1000, 10000, ['a', 'b', 'c'], 2, 20, 200, 2000]
list3.remove(['a', 'b', 'c'])  # 删除list3中的['a', 'b', 'c']
print(list3)
list3.clear()  # 删除list3中所有元素
print(list3)
[1, 10, 100, 1000, 10000, 2, 20, 200, 2000]
[]

(3) 列表元素的修改

对列表元素重新赋值,即对列表元素修改。

list4 = ['洗衣机','冰响','电视机','电脑','空调']
print(list4[1])
list4[1] = '冰箱'  # 将“冰响”修改为“冰箱”
print(list4)
冰响
['洗衣机', '冰箱', '电视机', '电脑', '空调']

4. 列表的其他方法

列表的其他方法,还有排序、计数、查询位置、反转等。

方法:

count()——对列表的某个元素进行计数,每次只能传递一个值;

index()——返回某元素在列表中的位置,若有多个该值,只返回首次出现的索引;

reverse()——将列表中的元素全部反转;

sort()——对列表元素排序,默认是升序,设置参数reverse=True,则按降序。

list5 = [7,3,9,11,4,6,10,3,7,4,4,3,6,3]
print(list5.count(3))  # 计算列表中元素3的个数
print(list5.index(6))  # 找出元素6所在的位置
list5.reverse()        # 列表元素的反转
print(list5)
list5.sort(reverse=True) # 列表元素的降序排列
print(list5)
4
5
[3, 6, 3, 4, 4, 7, 3, 10, 6, 4, 11, 9, 3, 7]
[11, 10, 9, 7, 7, 6, 6, 4, 4, 4, 3, 3, 3, 3]

3.1.2 元组

元组,是固定长度不可变的序列对象,用( )括起来。

元组与列表的区别:

  • 元组不可变,列表可变;
  • 元组通常存储异构的数据,列表通常存储同构的数据;
  • 元组主要用来表示结构(可作为字典的键值),列表主要用来表示顺序。
person = ('zhangsan', 20, 180, 80)   #元组
sheet = [('zhangsan', 20, 180, 80), ('wangwu', 25, 170, 60)]  #列表

元组可用的方法有count()和index(), 功能同列表。

t = ('a','d','z','a','d','c','a')
print(t.count('a'))   # 计数
print(t.index('c'))   # 元素位置
3
5

3.1.3 字典

字典是按 “键-值”对 存储数据的容器,键和值都是Python对象。

“键”是名字,“值”是内容,通过“键”来访问“值”,可以称之为映射。“键”可以是数字、字符串、元组;“值”可以是一般数据,甚至是列表、函数等。同一字典中,并不要求所有“键”或“值”是同构数据。

序列可以看作是一种“键”为有序数列的字典。

创建字典基本语法:

{key1: value1, key2: value2, ...}
dict1 = {'姓名':'张三','年龄':33,'性别':'男','子女':{'儿子':'张四','女儿':'张美'},'兴趣':['踢球','游泳','唱歌']}
print(dict1)
print(dict1['年龄'])          # 取出键为年龄的值
print(dict1['子女']['儿子'])  # 取出键为子女的值(是字典)中再键为儿子的值
print(dict1['兴趣'][1])       # 取出键为兴趣的值(是列表)中的索引为1的元素
{'姓名': '张三', '年龄': 33, '性别': '男', '子女': {'儿子': '张四', '女儿': '张美'}, '兴趣': ['踢球', '游泳', '唱歌']}
33
张四
游泳

1. 字典元素的增加或修改

有三种方法可以实现:

  • setdefault(key, value)
  • update(key: value) 或 update(object_dict)——增加或修改字典元素;
  • 通过对键索引赋值,若字典没有该键,则增加键-值对,若有该键,则修改该键的值。
dict1.setdefault('户籍','合肥')  # 往字典dict1中增加户籍信息
print(dict1)
dict1.update({'学历':'硕士'})    # 增加学历信息
print(dict1)
dict1['身高'] = 178              # 增加身高信息
print(dict1)
{'姓名': '张三', '年龄': 33, '性别': '男', '子女': {'儿子': '张四', '女儿': '张美'}, '兴趣': ['踢球', '游泳', '唱歌'], '户籍': '合肥'}
{'姓名': '张三', '年龄': 33, '性别': '男', '子女': {'儿子': '张四', '女儿': '张美'}, '兴趣': ['踢球', '游泳', '唱歌'], '户籍': '合肥', '学历': '硕士'}
{'姓名': '张三', '年龄': 33, '性别': '男', '子女': {'儿子': '张四', '女儿': '张美'}, '兴趣': ['踢球', '游泳', '唱歌'], '户籍': '合肥', '学历': '硕士', '身高': 178}
dict1.update({'学历':'本科'})   # 将键为学历的值改为本科
print(dict1)
dict1['年龄'] = 35              # 将键为年龄的值改为35
print(dict1)
dict1['兴趣'][2] = '跳舞'       # 将键为兴趣的值(是列表),中的索引为2的值改为跳舞
print(dict1)
{'姓名': '张三', '年龄': 33, '性别': '男', '子女': {'儿子': '张四', '女儿': '张美'}, '兴趣': ['踢球', '游泳', '唱歌'], '户籍': '合肥', '学历': '本科', '身高': 178}
{'姓名': '张三', '年龄': 35, '性别': '男', '子女': {'儿子': '张四', '女儿': '张美'}, '兴趣': ['踢球', '游泳', '唱歌'], '户籍': '合肥', '学历': '本科', '身高': 178}
{'姓名': '张三', '年龄': 35, '性别': '男', '子女': {'儿子': '张四', '女儿': '张美'}, '兴趣': ['踢球', '游泳', '跳舞'], '户籍': '合肥', '学历': '本科', '身高': 178}

2. 字典元素的删除

方法:

pop(key)——删除字典中键为key的键-值对,必须指定key;

popitem()——任意删除字典中一个键-值对;

clear()——删除字典中的全部键-值对,返回空字典。

dict1.pop('户籍')          # 删除字典中的键为户籍的键-值对
print(dict1)
dict1['子女'].pop('女儿')  # 字典中键为女儿的值(是字典),删除其中键为女儿的键-值对
print(dict1)
dict1.popitem()            # 删除字典中的任意一个键-值对
print(dict1)
dict1.clear()              # 清空字典
print(dict1)
{'姓名': '张三', '年龄': 33, '性别': '男', '子女': {'儿子': '张四', '女儿': '张美'}, '兴趣': ['踢球', '游泳', '唱歌'], '学历': '硕士', '身高': 178}
{'姓名': '张三', '年龄': 33, '性别': '男', '子女': {'儿子': '张四'}, '兴趣': ['踢球', '游泳', '唱歌'], '学历': '硕士', '身高': 178}
{'姓名': '张三', '年龄': 33, '性别': '男', '子女': {'儿子': '张四'}, '兴趣': ['踢球', '游泳', '唱歌'], '学历': '硕士'}
{}

3. 字典的其它方法

方法keys(), values(), items()分别取出字典中所有键、所有值、所有键-值对。

方法get()用来取出键对应的值,这与直接用键索引相同,区别是即使键不存在,也不会报错。

{'姓名': '张三', '年龄': 33, '性别': '男', '子女': {'儿子': '张四', '女儿': '张美'}, '兴趣': ['踢球', '游泳', '唱歌'], '学历': '本科'}
{'姓名': '张三', '年龄': 35, '性别': '男', '子女': {'儿子': '张四', '女儿': '张美'}, '兴趣': ['踢球', '游泳', '唱歌'], '学历': '本科'}
{'姓名': '张三', '年龄': 35, '性别': '男', '子女': {'儿子': '张四', '女儿': '张美'}, '兴趣': ['踢球', '游泳', '跳舞'], '学历': '本科'}
dict2 = {'电影':['三傻大闹宝莱坞','大话西游之大圣娶亲','疯狂动物城'],
         '导演':['拉吉库马尔·希拉尼','刘镇伟','拜伦·霍华德 '],
         '评分':[9.1,9.2,9.2]}

print(dict2.get('评分'))    # 取出键为'评分'所对应的值
print(dict2.keys())         # 取出字典中的所有键
print(dict2.values())       # 取出字典中的所有值
print(dict2.items())        # 取出字典中的所有键值对
[9.1, 9.2, 9.2]
dict_keys(['电影', '导演', '评分'])
dict_values([['三傻大闹宝莱坞', '大话西游之大圣娶亲', '疯狂动物城'], ['拉吉库马尔·希拉尼', '刘镇伟', '拜伦·霍华德 '], [9.1, 9.2, 9.2]])
dict_items([('电影', ['三傻大闹宝莱坞', '大话西游之大圣娶亲', '疯狂动物城']), ('导演', ['拉吉库马尔·希拉尼', '刘镇伟', '拜伦·霍华德 ']), ('评分', [9.1, 9.2, 9.2])])

参考文献

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值