Python-数据结构(二)
继上篇
三、列表
- 添加元素("增"append, extend, insert)
append:通过append可以向列表添加元素,并且默认添加在列表末尾。
示例:
namesList = ['tom', 'jerry', 'jhon']print("----添加之前,列表中的元素----")print(namesList)print("----添加之后,列表中的元素----")namesList.append("james")print(namesList)<br>运行结果:----添加之前,列表中的元素----['tom', 'jerry', 'jhon']----添加之后,列表中的元素----['tom', 'jerry', 'jhon', 'james']
extend:通过extend可以将另一个集合中的元素逐一添加到列表中
示例:
print("----使用append添加----")a = ['a', 'b', 'c']b = ['1', '2', '3']a.append(b)print(a)print("----使用extend添加----")a = ['a', 'b', 'c']b = ['1', '2', '3']a.extend(b)print(a)运行结果:----使用append添加----['a', 'b', 'c', ['1', '2', '3']]----使用extend添加----['a', 'b', 'c', '1', '2', '3']
insert:insert(index, object) 在指定位置index前插入元素object
示例:
1
2
3
4
5
6
a = [‘a’, ‘b’, ‘c’]
a.insert(1, “haha”)
print(a)
运行结果:
[‘a’, ‘haha’, ‘b’, ‘c’]
2. 删除元素("删"del, pop, remove,clear)
del:根据下标进行删除
示例:
movieName = ['绿巨人', '钢铁侠', '超人', '雷神', '洛基']print('------删除之前------')print(movieName)print('------删除之后------')del movieName[2]print(movieName)运行结果:------删除之前------['绿巨人', '钢铁侠', '超人', '雷神', '洛基']------删除之后------['绿巨人', '钢铁侠', '雷神', '洛基']
pop:删除最后一个元素
示例:
movieName = ['绿巨人', '钢铁侠', '超人', '雷神', '洛基']print('------删除之前------')print(movieName)print('------删除之后------')movieName.pop() # 也可以传入下标作为参数,删除该下标的元素print(movieName)运行结果:------删除之前------['绿巨人', '钢铁侠', '超人', '雷神', '洛基']------删除之后------['绿巨人', '钢铁侠', '超人', '雷神']
remove:根据元素的值进行删除
示例:
movieName = ['绿巨人', '钢铁侠', '超人', '雷神', '洛基']print('------删除之前------')print(movieName)print('------删除之后------')movieName.remove('超人')print(movieName)运行结果:------删除之前------['绿巨人', '钢铁侠', '超人', '雷神', '洛基']------删除之后------['绿巨人', '钢铁侠', '雷神', '洛基']
clear:清空所有元素
mlist = [1, 2, 3, 4, 5, 6, 7]mlist.clear()print(mlist)运行结果:[]
3. 修改元素(“改”)
修改元素的时候,要通过下标来确定要修改的是哪个元素,然后对其重新赋值
示例:
movieName = ['绿巨人', '钢铁侠', '超人', '雷神', '洛基']print('------修改之前------')print(movieName)print('------修改之后------')movieName[2] = '美国队长'print(movieName)运行结果:------修改之前------['绿巨人', '钢铁侠', '超人', '雷神', '洛基']------修改之后------['绿巨人', '钢铁侠', '美国队长', '雷神', '洛基']
- 查找元素("查"in, not in, index, count)
in, not in
示例:
name_list = ['tom', 'jerry', 'alice', 'james']print('tom' in name_list)print('tom' not in name_list)运行结果:TrueFalseindex, count
示例:
name_list = ['tom', 'jerry', 'alice', 'james', 'jerry']print(name_list.index('jerry', 1, 3))print(name_list.index('jerry', 4, 6))print(name_list.count('jerry'))运行结果:142
5. 排序(sort, reverse)
sort方法是将list按特定顺序重新排列,默认为由小到大,参数reverse=True可改为倒序,由大到小。
reverse方法是将list逆置。
示例:
a = [1, 4, 2, 3, 6, 5, 9, 8, 7]print('----原列表----')print(a)print('----reverse----')a.reverse()print(a)print('----sort----')a.sort()print(a)print('----sort(reverse=True)----')a.sort(reverse=True)print(a)运行结果:----原列表----[1, 4, 2, 3, 6, 5, 9, 8, 7]----reverse----[7, 8, 9, 5, 6, 3, 2, 4, 1]----sort----[1, 2, 3, 4, 5, 6, 7, 8, 9]----sort(reverse=True)----[9, 8, 7, 6, 5, 4, 3, 2, 1]
四、元组
python的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。
tuple = (1, 2, 3, 4)
- 访问元组
tuple = (1, 2, 3, 4)print(tuple[0])print(tuple[2])运行结果:13
- 元组的内置函数count, index
tuple = ('tom', 'jerry', 'alice', 'james')print(tuple.index('alice', 1, 3))print(tuple.count('jerry'))运行结果:21
五、字典
<strong>字典的创建</strong>person = {"name": "sb", 'age': 18}或person = dict(name='sb', age=18)person = dict({"name": "sb", 'age': 18})person = dict((['name','sb'],['age',18])){}.fromkeys(seq,100) #不指定100默认为None注意:>>> dic={}.fromkeys(['k1','k2'],[])>>> dic{'k1': [], 'k2': []}>>> dic['k1'].append(1)>>> dic{'k1': [1], 'k2': [1]}
变量info为字典类型:
info = {‘name’:‘孙悟空’, ‘id’:100, ‘sex’:‘男’, ‘address’:‘花果山’}
说明:
字典和列表一样,也能够存储多个数据
列表中找某个元素时,是根据下标进行的。字典中找某个元素时,是根据’名字’(就是冒号:前面的那个值,例如上面代码中的’name’、‘id’、‘sex’)
字典的每个元素由2部分组成,键:值。例如 ‘name’:‘孙悟空’ ,'name’为键,'孙悟空’为值
- 根据键访问值
info = {'name': '孙悟空', 'id': 100, 'sex': '男', 'address': '花果山'}print(info['name'])print(info['address'])运行结果:孙悟空花果山若访问不存在的键,则会报错:info = {'name': '孙悟空', 'id': 100, 'sex': '男', 'address': '花果山'}print(info['haha'])运行结果:Traceback (most recent call last):File "X:/xxx/xxx/xxx.py", line 2, in <module>print(info['haha'])KeyError: 'haha'在我们不确定字典中是否存在某个键而又想获取其值时,可以使用get方法,还可以设置默认值:info = {'name': '孙悟空', 'id': 100, 'sex': '男', 'address': '花果山'}print(info.get('name'))print(info.get('haha'))print(info.get('haha', 'haha'))运行结果:孙悟空Nonehaha
2. 修改元素
字典的每个元素中的数据是可以修改的,只要通过key找到,即可修改
info = {'name': '孙悟空', 'id': 100, 'sex': '男', 'address': '花果山'}print('----修改前----')print(info)print('----修改后----')info['name'] = "齐天大圣"print(info)运行结果:----修改前----{'name': '孙悟空', 'id': 100, 'sex': '男', 'address': '花果山'}----修改后----{'name': '齐天大圣', 'id': 100, 'sex': '男', 'address': '花果山'}
3. 添加元素
如果在使用变量名[‘键’] = 数据时,这个“键”在字典中,不存在,那么就会新增这个元素
info = {'name': '孙悟空', 'id': 100, 'sex': '男', 'address': '花果山'}print('----修改前----')print(info)print('----修改后----')info['age'] = 500print(info)运行结果:----修改前----{'name': '孙悟空', 'id': 100, 'sex': '男', 'address': '花果山'}----修改后----{'name': '孙悟空', 'id': 100, 'sex': '男', 'address': '花果山', 'age': 500}
4. 删除元素
del删除指定的元素
info = {'name': '孙悟空', 'id': 100, 'sex': '男', 'address': '花果山'}print('----删除前----')print(info)print('----删除后----')del info['sex']print(info)运行结果:----删除前----{'name': '孙悟空', 'id': 100, 'sex': '男', 'address': '花果山'}----删除后----{'name': '孙悟空', 'id': 100, 'address': '花果山'}
clear清空整个字典
info = {'name': '孙悟空', 'id': 100, 'sex': '男', 'address': '花果山'}print('----清空前----')print(info)print('----清空后----')info.clear()print(info)运行结果:----清空前----{'name': '孙悟空', 'id': 100, 'sex': '男', 'address': '花果山'}----清空后----{}
pop删除指定元素,若删除的元素不存在,可以指定返回值
dic = {'k1': 'v1','k2': 'v2'}v = dic.pop('k1')print(dic, v)# 运行结果{'k2': 'v2'} v1dic = {'k1': 'v1','k2': 'v2'}v = dic.pop('k111', 1)print(dic, v)# 运行结果{'k1': 'v1', 'k2': 'v2'} 1
keys
返回一个包含字典所有KEY的列表info = {‘name’: ‘孙悟空’, ‘id’: 100, ‘sex’: ‘男’, ‘address’: ‘花果山’}
info.keys()
dict_keys([‘name’, ‘id’, ‘sex’, ‘address’])values
返回一个包含字典所有value的列表
info = {‘name’: ‘孙悟空’, ‘id’: 100, ‘sex’: ‘男’, ‘address’: ‘花果山’}
info.values()
dict_values([‘孙悟空’, 100, ‘男’, ‘花果山’])
- items
返回一个包含所有(键,值)元组的列表
info = {‘name’: ‘孙悟空’, ‘address’: ‘花果山’}
info.items()
dict_items([(‘name’, ‘孙悟空’), (‘address’, ‘花果山’)])
- has_key和in
python3去除了has _key替换为in
如果key在字典中,返回True,否则返回False
info = {‘name’: ‘孙悟空’, ‘address’: ‘花果山’}
‘name’ in info
True
‘age’ in info
False
看看python2中的has_key,当然python2中in也可以使用
info = {‘name’: ‘孙悟空’, ‘address’: ‘花果山’}
‘name’ in info
True
info.has_key(‘name’)
True
info.has_key(‘age’)
False
- update
dic = {'k1': 'v1','k2': 'v2'}dic.update({'k1': 123, 'k3': 456})print(dic)<br># 运行结果{'k1': 123, 'k2': 'v2', 'k3': 456}
- 字典遍历
info = {'name': '孙悟空', 'address': '花果山'}print('----遍历字典的key(键)----')for key in info.keys():print(key, end='\t')print()print('----遍历字典的value(值)----')for value in info.values():print(value, end='\t')print()print('----遍历字典的项(元素)----')for item in info.items():print(item, end='\t')运行结果:----遍历字典的key(键)----name address----遍历字典的value(值)----孙悟空 花果山 ----遍历字典的项(元素)----('name', '孙悟空') ('address', '花果山')
六、集合
1. 定义
定义:由不同元素组成的集合,集合中是一组无序排列的可hash值,可以作为字典的key
特点:
不同元素组成
无序
每个元素必须是不可变类型
2. 集合的创建
{1,2,3,1}
或
定义可变集合set
>>> set_test=set(‘hello’)
>>> set_test
{‘l’, ‘o’, ‘e’, ‘h’}
改为不可变集合frozenset
>>> f_set_test=frozenset(set_test)
>>> f_set_test
frozenset({‘l’, ‘e’, ‘h’, ‘o’})
3. 常用操作
add 添加元素
s = {1, 2, 3}s.add(4)print(s)运行结果{1,2,3,4}
pop 随机删除一个元素
s = {'b', 123, 2, 3, 'a'}s.pop()print(s)#运行结果{3, 'b', 'a', 123}
remove 删除指定元素,删除不存在的元素时会报错
s = {'b', 123, 2, 3, 'a'}s.remove('a')print(s)# 运行结果{2, 3, 'b', 123}
discard 删除指定元素,删除不存在的元素时不会报错
intersection 或 & 交集
s = {'b', 123, 2, 3, 'a'}b = {'a', 2, 5, 123}sb = s.intersection(b)print(sb)print(s & b)# 运行结果{2, 123, 'a'}<br>{2, 123, 'a'}
union 或 | 并集
s = {'b', 123, 2, 3, 'a'}b = {'a', 2, 5, 123}sb = s.union(b)print(sb)print(s | b)# 运行结果{2, 3, 'a', 5, 'b', 123}{2, 3, 'a', 5, 'b', 123}
difference 或 - 差集
s = {'b', 123, 2, 3, 'a'}b = {'a', 2, 5, 123}sb = s - bbs = b - sprint(sb, bs)# 运行结果{3, 'b'} {5}
symmetric_difference 或 ^ 交叉补集(两个集合不共有的部分)
s = {'b', 123, 2, 3, 'a'}b = {'a', 2, 5, 123}sb = s.symmetric_difference(b)print(sb)# 运行结果{3, 5, 'b'}
difference_update 返回两集合的差集
s = {'b', 123, 2, 3, 'a'}b = {'a', 2, 5, 123}s.difference_update(b) # 将两集合的差集返回给sprint(s)# 运行结果{3, 'b'}
isdisjoint 如果两集合的交集为空集,返回True
s = {'b', 2, 3, }b = {'a', 5, 123}v = s.isdisjoint(b)print(v)# 运行结果True
issubset 如果s1是s2的子集,返回True
s1 = {1, 2}s2 = {1, 2, 3}v = s1.issubset(s2)print(v)#运行结果True
issuperset 如果s1包含s2父集,返回True
s1 = {1, 2}s2 = {1, 2, 3}v = s1.issuperset(s2)print(v)1# 运行结果 <br>False
update 更新
s1 = {1, 2}s2 = {1, 2, 3}s1.update(s2)print(s1)# 运行结果{1,2,3}
Python-数据结构(二)相关推荐
- python3 namedtuple_你不能低估的Python数据结构Namedtuple(二)
上篇你不能低估的Python数据结构Namedtuple(一)讲了namedtuple的一些基本用法,本篇继续. namedtuples和数据类(Data Class)之间有什么区别? 功能 在Pyt ...
- Python数据结构与算法(二)栈和队列
本系列总结了python常用的数据结构和算法,以及一些编程实现. 参考书籍:<数据结构与算法 Python语言实现> [美]Michael T.Goodrich, Roberto Tama ...
- 看例子,学 Python(二)
看例子,学 Python(二) 看例子,学 Python(一) 看例子,学 Python(三) 模块 文件 mymath.py 定义了函数 fib 和 fac,mymath.py 就是一个模块. A ...
- python数据结构树和二叉树,python数据结构树和二叉树简介
一.树的定义 树形结构是一类重要的非线性结构.树形结构是结点之间有分支,并具有层次关系的结构.它非常类似于自然界中的树. 树的递归定义: 树(Tree)是n(n≥0)个结点的有限集T,T为空时称为空树 ...
- python数据结构视频百度云盘_数据结构与算法Python视频领课
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 课程简介: 本课程包含Python编程基础的基本语法及变量,基本数据结构,Code Structure,Function.让学生在学会Python基础的同 ...
- Algorithm:【Algorithm算法进阶之路】之数据结构二十多种算法演示
Algorithm:[Algorithm算法进阶之路]之数据结构二十多种算法演示 目录 一.数据结构算法 1.顺序表 2.链表 3.栈和队列 4.串的模式匹配 5.稀疏矩阵 6.广义表 7.二叉树 8 ...
- Python数据结构之链表(linked list)
Python数据结构之链表 一.链表的基本知识 最近在leetcode刷题时遇到了几道关于链表的题,于是恶补了一下关于链表的知识.什么是链表?熟悉python语法的同学肯定都知道list,但是这并不是 ...
- Python数据结构学习笔记——链表:无序链表和有序链表
目录 一.链表 二.无序链表 实现步骤分析 三.无序链表的Python实现代码 四.有序链表 实现步骤分析 五.有序链表的Python实现代码 结语 一.链表 链表中每一个元素都由为两部分构成:一是该 ...
- Python数据结构学习笔记——队列和双端队列
目录 一.队列的定义 二.队列 实现步骤分析 三.队列的Python实现代码 四.队列的应用 六人传土豆游戏 五.双端队列的定义 六.双端队列 实现步骤分析 七.双端队列的Python实现代码 八.双 ...
- Python数据结构学习笔记——栈
目录 一.栈的定义和特性 (一)栈的定义 (二)栈的反转特性 二.实现分析步骤 三.栈的Python实现代码 四.栈的应用 (一)匹配圆括号 (二)匹配符号 (三)模2除法(十进制转二进制) (四)进 ...
最新文章
- R 语言关于 SSL 证书异常处理笔记
- Tensorflow—创建图
- measure_profile_sheet_of_light算子说明
- C#动态调用webservice
- 搜索引擎语法简介 google shodan censys zoomeye fofa dnsdb
- Spark SQL 函数全集
- 估价范围还没有生产式的物料帐薄
- python的opencv 车牌识别 开源_毕节进出口车牌识别系统怎么样
- lodash 源码解读 _.findIndex(obj_array, fn)
- 为什么说传统分布式事务不再适用于微服务架构?
- PAT乙级练习题1028 人口普查
- java中的POJO类
- 电科 | 电子器件微纳米加工技术
- Python描述 LeetCode 8. 字符串转换整数 (atoi)
- 在themeforest购买主题获得激活码方法
- java使用poi读写word中的图片(二)
- c语言程序设计学籍信息,c语言学籍信息管理系统设计
- 基于单片机的盆栽自动浇花系统-毕设课设protues仿真全套资料
- 华为机试 - 最大矩阵和
- 《LeetCode零基础指南》导读
热门文章
- Java使用正则表达式去掉小数类型字符串多余的.与0
- ajax请求后台报没有body_前端常见面试 - 请求篇
- SpringBoot注解自动扫描-底层实现
- SSM实现个人博客-day03
- java Jsoup不能获取完整响应内容
- MAC电脑:安装mysql报ERROR 1045 (28000)Access denied
- Android——浙理体育(飞翔的红蜻蜓)训练记录上传与查询测试DEMO解决方案
- Windows Security——获取Windows已经保存的WiFi网络密码
- 《Java程序设计》实验报告——Java的对象与类
- 解析ASP网页的执行顺序