今日份小技巧

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 字典的常用方法-其他方法

# item = dic.items()
# print(item,type(item))  # dict_items([('name', 'jin'), ('sex', 'male'), ('age', 18)]) <class 'dict_items'>
# 这个类型就是dict_items类型,可迭代的
# keys = dic.keys()
# print(keys,type(keys))  # dict_keys(['sex', 'age', 'name']) <class 'dict_keys'>
# values = dic.values()
# 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基础-数据类型的更多相关文章

  1. Python之路,Day4 - Python基础4 (new版)

    Python之路,Day4 - Python基础4 (new版)   本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...

  2. Day4 - Python基础4 迭代器、装饰器、软件开发规范

    Python之路,Day4 - Python基础4 (new版)   本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...

  3. Python基础数据类型-列表(list)和元组(tuple)和集合(set)

    Python基础数据类型-列表(list)和元组(tuple)和集合(set) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客使用的是Python3.6版本,以及以后分享的 ...

  4. Python基础数据类型-字符串(string)

    Python基础数据类型-字符串(string) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客使用的是Python3.6版本,以及以后分享的每一篇都是Python3.x版 ...

  5. python基础数据类型考试题

    Python基础数据类型考试题 考试时间:两个半小时                      满分100分(80分以上包含80分及格) 一,基础题. 1,简述变量命名规范(3分) 2,字节和位的关系 ...

  6. 1--Python 入门--Python基础数据类型

    一.Python基础语法 初次使用Python,首先要明确三点: Python的标识符(例如变量名.函数名等),可用字母.数字和下划线构成,不能以数字开头,且区分大小写. Python对于缩进敏感.在 ...

  7. python 基础数据类型之list

    python 基础数据类型之list: 1.列表的创建 list1 = ['hello', 'world', 1997, 2000] list2 = [1, 2, 3, 4, 5 ] list3 = ...

  8. Python基础数据类型-字典(dict)

    Python基础数据类型-字典(dict) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客使用的是Python3.6版本,以及以后分享的每一篇都是Python3.x版本的哟 ...

  9. Python基础数据类型题

    Python基础数据类型 题考试时间:三个小时 满分100分(80分以上包含80分及格)1,简述变量命名规范(3分) 1.必须是字母,数字,下划线的任意组合. 2.不能是数字开头 3.不能是pytho ...

  10. Python基础数据类型之字符串

    Python基础数据类型之字符串 一.Python如何创建字符串 在python中用引号将一些文本包起来就构成了字符串(引号可以是单引号.双引号.单三引号,双三引号,它们是完全相同的) >> ...

随机推荐

  1. 【WCF学习大全】

    我的WCF之旅(1):创建一个简单的WCF程序 我的WCF之旅(2):Endpoint Overview 我的WCF之旅(3):在WCF中实现双向通信(Bi-directional Communica ...

  2. DocX开源WORD操作组件的学习系列二

    DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...

  3. 从SQL Server CloudDBA 看云数据库智能化

    最近阿里云数据库SQL Server在控制台推出了CloudDBA服务,重点解决数据库性能优化领域问题,帮助客户更好的使用好RDS数据库,这是继MySQL之后第二个关系型数据库提供类似的服务.   数 ...

  4. Spring Boot 2.x(十三):你不知道的PageHelper

    PageHelper 说起PageHelper,使用过Mybatis的朋友可能不是很陌生,作为一款国人开发的分页插件,它基本上满足了我们的日常需求.但是,我想去官方文档看看这个东西配合Spring B ...

  5. javascript基础修炼(10)——VirtualDOM和基本DFS

    1. Virtual-DOM是什么 Virtual-DOM,即虚拟DOM树.浏览器在解析文件时,会将html文档转换为document对象,在浏览器环境中运行的脚本文件都可以获取到它,通过操作docu ...

  6. 经典JS的HTML转义与反转义字符

    //HTML转义 function HTMLEncode(html) { var temp = document.createElement ("div"); (temp.text ...

  7. Java开发笔记(十六)非此即彼的条件分支

    前面花了大量篇幅介绍布尔类型及相应的关系运算和逻辑运算,那可不仅仅是为了求真值或假值,更是为了通过布尔值控制流程的走向.在现实生活中,常常需要在岔路口抉择走去何方,往南还是往北,向东还是向西?在Jav ...

  8. Java Scanner nextLine方法跳过

    问题描述 Scanner使用了nextInt方法的时候,如果接下来要使用nextLine,会获取不到内容 原因 因为Scanner读取用户输入数据,是先判断缓冲区是否含有数据,没有则接收用户输入的数据 ...

  9. Web前端 Web前端和Web后端的区分

    一.绪论 1. 前台:呈现给用户的视觉和基本的操作. 后台:用户浏览网页时,我们看不见的后台数据跑动.后台包括前端.后端. 前端:对应我们写的html.css.javascript 等网页语言作用在前 ...

  10. java虚拟机的类加载器

    一.类的加载可以简单分成两种方式,静态加载和动态加载. 1.静态加载,就是new等方式使用到一个类的实例时,程序在运行到该处时,会把该类的.class文件加载到jvm里. 2.动态加载,通过Class ...