day4-python基础-数据类型
今日份小技巧
a =3
b=4,
最快将a和b值替换的方法为
a,b =b,a
今日内容
1. 字典
2. 集合
3.hash
4.基本数据类型总结
5.循环之for循环
6.range的使用
7.深浅copy
开始第四天的预习,
1.数据类型之字典
1.1 字典的定义以及特性
定义:字典是一种(key-value)型数据类型,python对key进行哈希运算,决定value的位置,所以字典是无序的,key必须可哈希并且不可变
特性:可以存放任意个值,可以修改,可以不唯一,查找速度快。列表是一个有序对象集合,字典是一个无序的对象集合,列表是通过偏移来查找数据,字典是通过键值来查找数据
####字典在python3.5以及3.5版本中是无序的,3.6优化了机制,字典会按照字典创建之初排序####
1.2 字典的常用方法-增
方法一:传统方法
dic = {'':'abc','':'cde'}
dic['key']= [1,2,3,4,5]
print(dic)
#结果,字典是无序的,只是这个显示是这样
{'': 'abc', '': 'cde', 'key': [1, 2, 3, 4, 5]} 方法二:setdefault
#方法就是给字典中添加键值对,如果只有键,则值为none,如果值在以前存在,则不对值做修改
dic = {'':'abc','':'cde'} dic.setdefault('k')
print(dic)
dic.setdefault('k1','v')
print(dic)
dic.setdefault('k1','v1')
print(dic)
print(dic.setdefault('k1','v1')) #结果。可以看出setdefault返回值为value
{'': 'abc', '': 'cde', 'k': None}
{'': 'abc', '': 'cde', 'k': None, 'k1': 'v'}
{'': 'abc', '': 'cde', 'k': None, 'k1': 'v'}
v
1.3 字典的常用方法-删
#第一种,删除返回值,有key返回对应的值,无key返回默认值,默认值需要设定
dic = {'':'abc','':'cde'} print(dic.pop(''))
print(dic)
#结果
abc
{'': 'cde'} #第二种,删除不返回值
dic = {'':'abc','':'cde'}
del dic['']
#结果
{'': 'abc'} #第三种,随机删除,在python3.6以及以后的版本中,都是删除的最后一个
dic = {'':'abc','':'cde'}
print(dic.popitem()) print(dic)
#结果
('', 'cde')
{'': 'abc'}
#第四种,清空字典
dic = {'':'abc','':'cde'}
dic.clear() print(dic)
#结果
{}
#第五种,使用通用办法del,对字典内容进行删除
1.4 字典的常用方法-改
#方法一:基本方法
dic = {'':'abc','':'cde'}
dic['']= 'abbbbb' #方法二:字典更新,俩个列表更新,如果有不同的key,则赋值,如果有相同的key,值覆盖对应的值
dic = {'':'abc','':'cde'}
dic2 = {'':'','':'abbb'}
dic.update(dic2)
print(dic) #结果
{'': 'abc', '': 'abbb', '': ''} #方法三:字典的更新,不过也是用的updata来做
dic = {'1':'abc','2':'cde'}
dic.updata(weight ='80KG')#谨记,采用这种办法,括号内左边的值相当于变量名,后面为为变量赋值,函数会将俩个值转变为一个键值对给字典赋值,前面变量名不可为数字
1.5 字典的常用方法-查
#方法一,直接查找,若有返回对应的键值,如果没有对应的键,则报错
dic = {'':'abc','':'cde'}
print(dic[''])
print(dic[''])
#结果
Traceback (most recent call last):
abc
File "D:/pycharm/全栈三期/day3/test.py", line 309, in <module>
print(dic[''])
KeyError: '' #方法二,查找,若有返回对应的键值,如果没有则返回设定的默认值
dic = {'':'abc','':'cde'}
print(dic.get('','无'))
print(dic.get('','无'))
print(dic)
#结果
abc
无
{'': 'abc', '': 'cde'}
1.6 字典的常用方法-循环
dic = {'':'abc','':'cde'}
for i in dic:
print(i) for i in dic.items():
print(i) for k,v in dic.items():
print(k,v) #结果
1
2
('', 'abc')
('', 'cde')
1 abc
2 cde
1.7 字典的常用方法-其他方法
# print(item,type(item)) # dict_items([('name', 'jin'), ('sex', 'male'), ('age', 18)]) <class 'dict_items'>
# 这个类型就是dict_items类型,可迭代的
# print(keys,type(keys)) # dict_keys(['sex', 'age', 'name']) <class 'dict_keys'>
# print(values,type(values)) # dict_values(['male', 18, 'jin']) <class 'dict_values'> 同上
1.8字典的相关函数
#.fromkeys函数,快速生成大量数
dic = dict.fromkeys([1,2,3],['alex'])
print(dic) dic [1].append('sb')
#坑#这个函数用法是前面一个可迭代对象,后面为一个随意值,不过后面的值为可变对象,就会发现所有生成的字典对象都会变更 print(dic) #结果
{1: ['alex'], 2: ['alex'], 3: ['alex']}
{1: ['alex', 'sb'], 2: ['alex', 'sb'], 3: ['alex', 'sb']}
2.数据类型之集合
2.1 集合的定义以及特性
定义:集合是一个无序的,不重复的数据组合,s ={1,2,3,4}则直接创建
特性:自动去重,将列表转换为集合则会自动去重,主要作用为关系测试 l = [1,2,3,4] s =set(l)则直接转换为集合
2.2 集合的增删改查
s.add() #增加,一次只能增加一个
s.pop() #删除,随机删除一个值
s.remove() #指定删除一个值
s.discard() #丢弃,删除一个值,不存在则不报错,存在则删除!
s.update() #把一个集合和另外一个集合合并,update可以一次性添加多个值
2.3 集合的关系运算
关系运算算是集合经典使用方法了,下面就来看一下集合的关系运算,举个例子,有些人只买iphone7有些人只买iponeX
2.3.1 交集
iphone6sp ={'alex','jack','tom','tony','happy','sugimoto','mizutani'}
iphoneX ={'happy','yuki','sugimoto'} #交集
print(iphone6sp.intersection(iphoneX))
print(iphone6sp&iphoneX) #结果
{'sugimoto', 'happy'}
{'sugimoto', 'happy'}
2.3.2 差集
#差集,有先后顺序,是前一个差后面
print(iphone6sp.difference(iphoneX))
print(iphone6sp-iphoneX) #结果
{'mizutani', 'jack', 'tom', 'tony', 'alex'}
{'mizutani', 'jack', 'tom', 'tony', 'alex'}
2.3.3 并集
#并集
print(iphone6sp.union(iphoneX))
print(iphone6sp|iphoneX) #结果
{'yuki', 'tony', 'mizutani', 'jack', 'sugimoto', 'tom', 'happy', 'alex'}
{'yuki', 'tony', 'mizutani', 'jack', 'sugimoto', 'tom', 'happy', 'alex'}
2.3.4 对称差集
#对称差集
print('只买苹果6sp和苹果X的人')
print(iphone6sp.symmetric_difference(iphoneX))
print(iphone6sp^iphoneX) #结果
只买苹果6sp和苹果X的人
{'yuki', 'mizutani', 'jack', 'tom', 'tony', 'alex'}
{'yuki', 'mizutani', 'jack', 'tom', 'tony', 'alex'}
2.3.5 超集子集
#超集子集
s1 ={1,2,3,4,5,'jack'}
s2 = {1,2,3}
#判断子集
print(s2.issubset(s1))
print(s1 > s2) #都是判断s2是不是s1的子集 #判断超集
print(s2.issuperset(s1))
print(s1< s2) #都是判断s2是不是s1的超集 #结果
True
True
False
False
2.4 集合的其他用法
.isdijoint(s2)#判断俩个集合可交集
.difference_update() #把俩个集合的差集赋值给后者
.intersection_updata() #把俩个集合的交集赋值给后者
3.数据类型之hash
3.1 hash的定义以及特性
hash一般称之为“散列”,将任意长度的消息压缩到某一固定长度的消息摘要
3.2 hash的用法
hash值固定,不可更改,只有不可变类型才能被hash
3.3 hash的使用环境
一般用途为文件签名,md5加密,密码验证
用法就是.hash()
4.数据类型的总结
4.1 按照存储空间来分,从小到大
数字
字符串
集合:无序,即无序存索引相关信息
元组:有序,需要存索引相关信息,不可变
列表:有序,需要存索引相关信息,可变,需要处理数据的增删改
字典:无序,需要存key与value映射的相关信息,可变,需要处理数据的增删改
4.2 按照存值个数区分
标量/原子类型 | 数字,字符串 |
容器类型 | 列表,元组,字典 |
4.3 按照可变不可变区分(hash)
可变 | 列表,字典 |
不可变 | 数字,字符串,元组,布尔值 |
4.4 按照访问顺序区分
直接访问 | 数字 |
顺序访问(序列类型) | 字符串,列表,元组 |
key值访问(映射类型) | 字典 |
4.5 数据类型之间的转换
现有的数据类型有
int(整型)
str(字符串)
bool 布尔值)
list(列表)
dict(字典)
tuple(元祖)
set(集合)
主要的数据类型转换
int <------>str (要转换就在前面加类型),str(),int()
int <------>bool,非零为真,零为假;布尔值转为数字,真为1,假为0
str ------>bool,非空为真,空为假;,bool值转为字符串无意义
str <------>list str转list用splite,list转str用join ****
空列表,空字典,空元祖,空集合,对应的都是bool值得假
list <------>set (要转换就在前面加类型),list转换为set自动去重
list <------>tuple(要转换就在前面加类型)
dict ------->list 打印字典的key值
dict ------->tuple 打印字典的key值
4.6 数据类型的补充
# 元组中只有一个元素并且没有逗号,则他不是元组与元素数据类型相同。
# tu1 = (1)
# tu2 = ('alex')
# tu3 = ([1,2,3])
# print(tu1, tu2, tu3)
#结果
1 alex [1, 2, 3]
#不过加了逗号就都变成集合了
(1,) ('alex',) ([1, 2, 3],)
4.7 列表与字典的一些特殊处理方法
题目一:# li = [11, 22, 33, 'alex', 55] 将列表中索引为奇数位的元素删除。
错误解法:
li = [11, 22, 33, 'alex', 55]
for i in range(len(li)):
if i %2 ==1:
li.pop(i)
print(li) #错误结果
[11, 33, 'alex']
#结果发现并没有我们预期的55
正确解法
del li[1::2]
print(li)
#或者是倒序取值,倒着切
#结果
[11, 33, 55]
题目二:dic = {'k1':1,'k2':2, 'k3': 3, 'name': '太白'},将字典中键含有k元素的键值对删除
错误解法
dic = {'k1':1,'k2':2, 'k3': 3, 'name': '太白'}
for key in dic:
if 'k' in key:
dic.pop(key)
#结果
RuntimeError: dictionary changed size during iteration
翻译过来就是说字典的长度在迭代中修改了
正确解法
dic = {'k1':1,'k2':2, 'k3': 3, 'name': '太白'}
l1 = []
for key in dic:
if 'k' in key:
l1.append(key)
for k1 in l1:
dic.pop(k1)
print(dic)
#结果
{'name': '太白'}
总结:在循环一个列表时,最好不要改变列表的大小,这样会影响你的最终结果。在循环一个字典时,不能更改字典的大小,否则会报错!
5.循环之for循环
5.1 for循环也是在python中经常用到的内容,用户按照顺序循环迭代可迭代对象
字符串,列表,元祖,字典都可以迭代
5.2 与for循环相关的就是enumerate,就是枚举
对于于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值。
list = [1,2,3,4,5,6]
for i in enumerate(list):
print(i) for i ,j in enumerate(list):
print(i,j) #结果
(0, 1)
(1, 2)
(2, 3)
(3, 4)
(4, 5)
(5, 6)
0 1
1 2
2 3
3 4
4 5
5 6
6.range的使用
指定范围生成指定数字以及内容,可迭代对象
for i in range(1,10):
print(i) for i in range(1,10,2): # 步长
print(i) for i in range(10,1,-2): # 反向步长
print(i)
7.查漏补缺之深浅copy
深浅copy放在单独的一个去书写
day4-python基础-数据类型的更多相关文章
- Python之路,Day4 - Python基础4 (new版)
Python之路,Day4 - Python基础4 (new版) 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...
- Day4 - Python基础4 迭代器、装饰器、软件开发规范
Python之路,Day4 - Python基础4 (new版) 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...
- Python基础数据类型-列表(list)和元组(tuple)和集合(set)
Python基础数据类型-列表(list)和元组(tuple)和集合(set) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客使用的是Python3.6版本,以及以后分享的 ...
- Python基础数据类型-字符串(string)
Python基础数据类型-字符串(string) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客使用的是Python3.6版本,以及以后分享的每一篇都是Python3.x版 ...
- python基础数据类型考试题
Python基础数据类型考试题 考试时间:两个半小时 满分100分(80分以上包含80分及格) 一,基础题. 1,简述变量命名规范(3分) 2,字节和位的关系 ...
- 1--Python 入门--Python基础数据类型
一.Python基础语法 初次使用Python,首先要明确三点: Python的标识符(例如变量名.函数名等),可用字母.数字和下划线构成,不能以数字开头,且区分大小写. Python对于缩进敏感.在 ...
- python 基础数据类型之list
python 基础数据类型之list: 1.列表的创建 list1 = ['hello', 'world', 1997, 2000] list2 = [1, 2, 3, 4, 5 ] list3 = ...
- Python基础数据类型-字典(dict)
Python基础数据类型-字典(dict) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客使用的是Python3.6版本,以及以后分享的每一篇都是Python3.x版本的哟 ...
- Python基础数据类型题
Python基础数据类型 题考试时间:三个小时 满分100分(80分以上包含80分及格)1,简述变量命名规范(3分) 1.必须是字母,数字,下划线的任意组合. 2.不能是数字开头 3.不能是pytho ...
- Python基础数据类型之字符串
Python基础数据类型之字符串 一.Python如何创建字符串 在python中用引号将一些文本包起来就构成了字符串(引号可以是单引号.双引号.单三引号,双三引号,它们是完全相同的) >> ...
随机推荐
- 【WCF学习大全】
我的WCF之旅(1):创建一个简单的WCF程序 我的WCF之旅(2):Endpoint Overview 我的WCF之旅(3):在WCF中实现双向通信(Bi-directional Communica ...
- DocX开源WORD操作组件的学习系列二
DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...
- 从SQL Server CloudDBA 看云数据库智能化
最近阿里云数据库SQL Server在控制台推出了CloudDBA服务,重点解决数据库性能优化领域问题,帮助客户更好的使用好RDS数据库,这是继MySQL之后第二个关系型数据库提供类似的服务. 数 ...
- Spring Boot 2.x(十三):你不知道的PageHelper
PageHelper 说起PageHelper,使用过Mybatis的朋友可能不是很陌生,作为一款国人开发的分页插件,它基本上满足了我们的日常需求.但是,我想去官方文档看看这个东西配合Spring B ...
- javascript基础修炼(10)——VirtualDOM和基本DFS
1. Virtual-DOM是什么 Virtual-DOM,即虚拟DOM树.浏览器在解析文件时,会将html文档转换为document对象,在浏览器环境中运行的脚本文件都可以获取到它,通过操作docu ...
- 经典JS的HTML转义与反转义字符
//HTML转义 function HTMLEncode(html) { var temp = document.createElement ("div"); (temp.text ...
- Java开发笔记(十六)非此即彼的条件分支
前面花了大量篇幅介绍布尔类型及相应的关系运算和逻辑运算,那可不仅仅是为了求真值或假值,更是为了通过布尔值控制流程的走向.在现实生活中,常常需要在岔路口抉择走去何方,往南还是往北,向东还是向西?在Jav ...
- Java Scanner nextLine方法跳过
问题描述 Scanner使用了nextInt方法的时候,如果接下来要使用nextLine,会获取不到内容 原因 因为Scanner读取用户输入数据,是先判断缓冲区是否含有数据,没有则接收用户输入的数据 ...
- Web前端 Web前端和Web后端的区分
一.绪论 1. 前台:呈现给用户的视觉和基本的操作. 后台:用户浏览网页时,我们看不见的后台数据跑动.后台包括前端.后端. 前端:对应我们写的html.css.javascript 等网页语言作用在前 ...
- java虚拟机的类加载器
一.类的加载可以简单分成两种方式,静态加载和动态加载. 1.静态加载,就是new等方式使用到一个类的实例时,程序在运行到该处时,会把该类的.class文件加载到jvm里. 2.动态加载,通过Class ...