Python学习笔记1-内置数据结构
变量:
存储一个对象的引用;由id()、type()、value组成
1.列表[list]:
python内置数据结构
本身由id()、type()、value组成,指向列表对象;
列表对象相当于数组,存储多个对象的引用;对象可以为多个不同数据类型;
列表的创建
lst = [1,'2',1,'hello','world'] lst = list([1,'2',1])
列表的特点
元素有序、索引映射唯一数据(正序0开始,逆序-1开始)、存储重复数据、存储不同数据类型、根据需要动态分配和回收内存
列表的查询
获取索引
有相同元素,只返回第一个元素的索引;
lst.index(1)
指定索引区间[0,2)
lst.index('2',0,2)
获取单个元素
正向0N-1,逆向-1-N;
lst[0]=lst[-N]
获取多个元素:切片
[0,3)步长为2,步长为-1(逆着取,区间也逆过来,索引左大右小)
lst[0:3:2] lst[::-1]
首、尾(省略就能取到,无论正逆)
lst[:3:2] lst[1::2]
判断是否在列表中
print('2' in lst) print(10 not in lst)
列表的遍历
迭代变量:字符串、列表…
for 迭代变量 in lst
列表元素添加
append()在末尾添加一个元素,列表对象不变(id不变),可以将列表作为元素添加进去
extend()在末尾添加若干元素,列表对象不变(id不变),可以将列表添加进去(列表里的元素拿出来添加)
insert()在任意位置添加一个元素,在索引1上添加90
lst.insert(1,90)
切片:在任意位置上添加若干元素
在从lst的索引1开始替换(添加)lst3中的每个元素
lst3=[True, False, 1] lst[1:]=lst3
列表元素和列表的删除
remove()根据元素删除,一次只删一个元素,有重复就删第一个
pop()根据索引移除元素,不指定就删除最后一个元素
将list切片赋值给其他列表,也可用空列表赋给自身的切片
clear()清空列表,列表对象还在
del命令,删除列表对象
列表元素的修改
列表元素的排序
lst.sort(),默认从小到大,reverse=True则从大到小,在原列表上改(id不变)
sorted(lst),内置函数,产生一个新列表,reverse=True则从大到小
列表生成式
lst = [i*i for i in range(1,10)]
2.字典{dict}
python内置数据结构,和列表一样是一个可变序列(可以增删改,对象地址不变)
字典以键值对方式存储数据(元素是键值对),是无序的序列(第一个放未必第一个位置、其位置由hash工序决定(把键放到hash函数计算)所以键要求*不可变序列(字符串)***)
字典的创建
dic = {'a':1, 'b':2, 'c':3} dic = dict(d=4,e=5) dic = {}
字典值的获取
利用键获取值。如果不存在[]会报错,get默认返回None(可以改返回值为99)
dic['a'] dic.get('a',99)
字典元素增、删、改
判断key是否存在
'a' in dic 'b' not int dic
删除指定键值对
del dic['a']
清空字典元素
dic.clear()
新增或修改
dic['h']=5 dic['a']=5
获取字典视图
keys()获取所有key,返回dict_keys类型,列表[]
values()获取所有value,返回dict_values类型,[]
items()获取所有key,value对,返回dict_items类型,由元组组成的列表[( , ),( , )]
字典的特点
字典生成式
将两个可迭代对象(字典、列表),按序将对应元素打包成一个个元组,返回由元组组成的列表(要进行list转换)
items=['a','b','c'] prices=[1,2,3] lst=zip(items,prices)#这个返回值显示看不来 list(lst)#需要转换成列表,看到里面全是元组d = {item:price for item, price in zip(items, prices)}# 这个把元组按序取出来,并且循环按序赋给item:price;
3.元组(tuple)
python内置数据结构,不可变序列(和字符串一样没有增删改,对象地址会变),和列表很像,用的是()
元组的创建
使用小括号创建可以省略小括号,但对于单元素的元素不可以这样
仅有一个元素的元组必须加小括号和逗号**(如果没有逗号,仍然会被误认为元素本身的数据类型)
t = ('a','b',1)# 可以不写(),直接赋值默认为元组 t = tuple(('a','b',1)) t = () t = tuple()
为什么设计元组为不可变序列
变量内数据不可修改,避免因修改数据导致的错误
在多任务环境下,同时操作对象,不需要加锁(可以看,不可以动)
元组中存储的是对象的引用
引用不允许更改,只能指向原来的那个对象(例如指向列表,可以再这个列表面操作,但是不能指向其他列表或变量等
元组的遍历
for item in t:print(item)
4.集合{set}
python提供的内置数据结构,可变类型序列(和列表、字典一样),是没有value的字典(用hash函数计算位置,无序的,不允许重复)
集合的创建
s={1,2,3,4,5,5}# 集合元素不允许重复,重复的只保存1个 s=set([1,2,3,4,5,5])#set转换列表、元组 s8 = {}# 这无法定义空集合,这是字典dict s8 = set()# 这是空集合,类型是set
集合相关操作
元素的判断
in,not in
新增集合元素
删除集合元素
remove()一次删除一个指定元素,不存在抛出KeyError异常
discard()一次删除一个指定元素,不存在不抛出异常
pop()一次删除一个任意元素
clear()清空集合元素
集合间的关系
相等
元素相同,==或者!=
子集
s1.issubset(s2)# s2是s1的子集与否
超集
issuperset()
交集
集合的数据操作
集合的生成式
{i*i for i in range(1,5)}
列表、元组、字典、集合总结
数据结构 | 是否可变 | 是否重复 | 是否有序 | 定义符号 |
---|---|---|---|---|
列表list | 可变 | 可以 | 有 | [] |
元组tuple | 不可变 | 可以 | 有 | () |
字典dict | 可变 | key不可,value可 | 无 | {key:value} |
集合set | 可变 | 不可 | 无 | {} |
字符串
python基本数据类型,不可变的字符序列
字符串驻留机制
仅保存一份相同不可变字符串,不同的值放在字符串的驻留池。因此对相同的字符串只保留一份拷贝,后续创建不会开辟新空间,直接把该字符串地址赋给新变量。
a,b,c都指向’python’这个内存空间。
a='python' b="python" c='''python'''
驻留机制的几种情况
①符合**标识符(字符、数字、下划线)**的字符串、
②字符串长度为0或1、
③只在编译(解释器)时进行驻留(例如基本运算),而非运行时(例如函数)、
④[-5,256]之间的整数数字(不是字符串)
可以用a=sys.inter(b)强制驻留
Pycharm会对字符串做优化处理,让内容相同的驻留
驻留机制优却点
python中一切皆对象,创建对象和销毁对象消耗时间、内存,从字符串池拿来实用,提升效率节约内存。
字符串的常用操作
字符串的查询
index()查找子串第一次出现位置,不存在抛异常
rindex()查找子串最后一次出现位置,不存在抛异常
find()查找子串第一次出现位置,不存在不抛异常返回-1
rfind()查找子串最后一次出现位置,不存在不抛异常返回-1
字符串的大小写转换
字符串内容对齐
center()居中对齐,参数一宽度,参数2填充符(默认空格)。宽度小于原字符串的,返回原字符。
ljust()左对齐,
rjust()右对齐,
zfill()右对齐,左边用0填充。只有参数1。对负数字符串,0添加在**-**之后
字符串劈分
split()左边开始劈分,sep指定分隔符(默认空格),maxsplit指定最大劈分次数(其余字串单独作为一部分),返回列表
字符串判断
isidentifier()是否合法标识符
isspace()是否空白字符组成(回车、换行、水平制表等等)
isalpha()是否只由字母组成
isdecimal()是否只十进制数字组成(罗马数字不算)
isnumeric()是否只数字组成(罗马、汉字都算)
isalnum()是否只有数字、字母组成(中文算字母)
字符串替换与合并
replace()参数1被替代的子串,参数2替换的子串,参数3最大替换次数。替换后,原字符串不发生变化。
s = 'hello,python' s.replace('python', 'java')# 用java替换s中的pythons1 = 'hello,python,python,python' s1.replace('python','java',2)# 用java替换s1中python,替换2次
join()将列表或元组中的字符串合并成一个。如果要合并一个字符串,会把它当作字符序列
lst = ['hello', 'java'] '|'.join(lst) # 用|连接lst里的字符串
字符串的比较
比较规则:从左往右按字符依次比较,如果不满足就不继续比较了
比较原理:字符原始值ord(‘a’)<ord(‘b’),原始值对应字符chr(98)=‘b’。中文也有对应的ASCII码
字符串的切片
格式化字符串
比如填写申请表,空格处是我们填写的内容,这里是可以变化的。拼接操作会浪费空间,因此格式化字符串就行。
格式化字符三种方式
%占位符:%s字符串,%d或%i整数,%f浮点数
name = 'zjj' age = 18 '我叫%s,几年%d岁' % (name, age)# 用 %
{}占位符:{0}第0个位置,{1}第一个位置
name = 'zjj' age = 18 '我叫{0},几年{1}岁'.format(name, age) # 用.format
f-string
f'我叫{name},今年{age}岁'
字符宽度、精度
%10d,宽度10字符
%.3f,保留三位小数
%10.3f,宽度10,3位小数
{0:.3},保留三位有效数(0代表占位符位置,可以省略)# 冒号后加格式要求
{0:.3f},保留三位小数
{0:10.3f},宽度10,3位小数
字符串的编码解码转换
不同计算机,str在内存中的表示方式不同(A:Unicode,编码后,byte字节传输,B解码并显示)
s='天涯共此时' byte = s.encode(encoding='GBK') # 一个中文俩字符 string = byte.decode(encoding='GBK') # 编码解码的格式要相同byte = s.encode(encoding='UTF-8')# 一个中文仨字符 string = byte.decode(encoding='UTF-8')
Python学习笔记1-内置数据结构相关推荐
- Python学习笔记:常用内建模块7XML
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记:常用内建模块5
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记:常用内建模块2:collections
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记011——内置函数exec()
1 描述 把一个字符串当成语句执行 exec() 执行储存在字符串或文件中的 Python 语句,相比于 eval() , exec() 可以执行更复杂的 Python 代码. exec函数和ev ...
- Python技术分享:内置数据结构之双向队列
Python语言内置了很多常见的数据结构,不仅能够让你的程序运行速度更快还能帮助你简化开发流程,下面小千就来给大家介绍一下这个双向队列. collections模块中的deque类,就是双向队列,这种 ...
- python字典内置方法_柳小白Python学习笔记 12 内置方法之字典方法
学习字典的时候只学习了最基本的字典定义和创建方式.今天再学习两种字典的创建方法及字典内置方法的使用. 现在春暖花开,所以我用花的元素创建了garden(花园)系列字典,字典的键是flowers(花名) ...
- [Python学习第一天]内置数据类型介绍,万物皆对象!
1.内置布尔类型 (True and False. 非零值可代表True,零值可以代表False.) 这里的零值和非零值我把它广泛理解,而不是像Java那样int=0 之类的 这里的零值包括:数值 ...
- python学习笔记011——内置函数__module__、__name__
1 __module__描述 __module__ : 如果当前模块为顶层模块执行 则打印__main__ 如果当前模块为被调用模块的时候 打印当前模块的名称 2 __module__示例 def f ...
- python学习笔记 day16 内置函数(四)
复习 python中有哪些数据类型:int str bool list tuple dict set python中有哪些数据结构: list,tuple,dict,set reversed()--- ...
- python学习笔记 day15 内置函数(三)
bin(),oct(),hex()----进制转换,将十进制分别转换成二进制,八进制和十六进制 print(bin(10)) print(oct(10)) print(hex(10)) 运行结果: a ...
最新文章
- JDK10都发布了,nio你了解多少?
- 蚂蚁金服CTO鲁肃:支付宝成就了我,我做了很多“拧螺丝”的事儿
- [gic]-ARM gicv3/gicv4的详细介绍-2020/12
- VTK:图表之SelectedVerticesAndEdgesObserver
- wxpython使用matplot_测试怎么将MatPlotLib嵌入到wxPython中
- modelandview怎么在页面循环_新号段来啦!!!“靓号”怎么选?
- LoadRunner变量到参数的互换
- 微信退款通知,退款回调数据解密.SHA256签名AEAD_AES_256_GCM解密
- GDB调试程序(二)
- LeetCode 1003. 检查替换后的词是否有效(栈)
- java 接口隔离_关于接口隔离原则的一个实现:
- 查找出现次数 oracle,ORACLE计算某个列中出现次数最多的值
- 【九天教您南方cass 9.1】 08 绘制等高线及对其处理
- 《高等数学》练习题库含答案(大学期末复习资料)
- 奇迹s6ep3服务器修改技术,奇迹S6EP3服务端之让天鹰及装备不掉持久的
- Java---利用Zing生成二维码、解析二维码
- js设计模式:什么是单例模式?js单例模式的介绍
- 合肥工业大学计算机与信息学院胡敏,合肥工业大学计算机与信息学院导师介绍:胡敏...
- 【python进阶】古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
- 自然语言处理学习笔记-lecture08-语义分析
热门文章
- Visitor パターン
- gawk创建标题和脚本_使用此Gawk脚本为社交媒体帖子创建精美的文本
- ildasm Reflector
- python从键盘输入一个字符串、将小写字母全部_从键盘输入一个字符串,将其中的小写字母全部转换成大写字母...
- 软考的高级证书难考吗,难度大吗?
- 关于 I/O 的五分钟法则
- office中的OLE操作和问题
- 【行业科普】一篇文读懂四大、咨询、投行、PE
- Dataway让Spring Boot不再需要Controller、Service、DAO、Mapper
- 国际标准ISO/IEC 30144: 2020在智能变电站辅助监测中的应用研究