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中用引号将一些文本包起来就构成了字符串(引号可以是单引号.双引号.单三引号,双三引号,它们是完全相同的) >> ...
随机推荐
- 什么是LogDashboard?
What is LogDashboard 接上篇 LogDashboard是可视化的日志面板,摆脱了传统查看txt与数据库的方式. 使查看日志变的简单方便并且可供分析 基于Net Core中间件编写适 ...
- 【微信小程序云开发】从陌生到熟悉
前言 微信小程序在9月10号正式上线了云开发的功能,弱化后端和运维概念,以前开发一个小程序需要申请一个小程序,准备一个https的域名,开发需要一个前端一个服务端,有了云开发只有申请一个小程序,一个前 ...
- npm用法
查看包信息npm info mongodb 查看包的最新版本npm view mongodb version 安装npm install mongodb@2.2.33 已安装的包修改版本npm ins ...
- SmartSql For Asp.Net Core 最佳实践
常规操作 安装 SmartSql Install-Package SmartSql 安装 SmartSql.DIExtension Install-Package SmartSql.DIExtensi ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-模块管理按子系统进行分类管理
在RDIFramework.NET以往的框架中,模块管理界面展示了整个框架所管理的所有模块,如果系统过多,达几十个甚至上百个子系统时,管理起来就非常的麻烦,不光加载效率会很低,页面展示也会很不友好.框 ...
- 【API知识】一种你可能没见过的Controller形式
前言 这里分享一下我遇到的一个挺有意思的Controller形式,内容涉及@RequestMapping注解的原理. 实际案例 一.基本描述 项目甲中有多个模块,其中就有模块A和B.(这里的模块指的是 ...
- Alibaba Cluster Data 开放下载:270GB 数据揭秘你不知道的阿里巴巴数据中心
打开一篇篇 IT 技术文章,你总能够看到“大规模”.“海量请求”这些字眼.如今,这些功能强大的互联网应用,都运行在大规模数据中心上,然而,对于大规模数据中心,你又了解多少呢?实际上,除了阅读一些科技文 ...
- 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
本文由云+社区发表 作者:腾讯工蜂用户:王二卫 从不一样的视角了解git,以便更好的使用git 一.git & git 版本库认识 git 是一个内容寻址的文件系统,其核心部分是一个简单的键值 ...
- 容器平台自动化CI/CD流水线实践之一:环境概述
一.架构图
- [二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口
函数式接口详细定义 package java.lang; import java.lang.annotation.*; /** * An informative annotation type use ...