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中用引号将一些文本包起来就构成了字符串(引号可以是单引号.双引号.单三引号,双三引号,它们是完全相同的) >> ...
随机推荐
- Unity实现c#热更新方案探究(一)
转载请标明出处:http://www.cnblogs.com/zblade/ 最近研究了一下如何在unity中实现c#的热更新,对于整个DLL热更新的过程和方案有一个初步的了解,这儿就写下来,便于后续 ...
- 行为驱动:Cucumber + Selenium + Java(三) - 使用标签实现测试分组
在上一篇中,我们写出了Selenium + Cucumber + Java环境下的第一个BDD自动化测试用例,这一篇我们说说怎么用标签对用例进行分组. 3.1 Cucumber标签 实际工作中,我们的 ...
- Jenkins自定义主题
x下载自定义样式 http://afonsof.com/jenkins-material-theme/ 打开连接 最后点击:DOWNLOAD TOUR THEME! 得到样式文件:jenkins-ma ...
- 【java 多线程】多线程并发同步问题及解决方法
一.线程并发同步概念 线程同步其核心就在于一个“同”.所谓“同”就是协同.协助.配合,“同步”就是协同步调昨,也就是按照预定的先后顺序进行运行,即“你先,我等, 你做完,我再做”. 线程同步,就是当线 ...
- Spring Cloud学习笔记-012
分布式服务跟踪:Spring Cloud Sleuth 随着业务的发展,系统规模也会变得越来越大,各微服务间的调用关系也变得越来越错综复杂.通常一个由客户端发起的请求在后端系统中会经过多个不同的微服务 ...
- leetcode — single-number
/** * Source : https://oj.leetcode.com/problems/single-number/ * * * Given an array of integers, eve ...
- ASP.NET Core 2.1 : 十一. 如何在后台运行一个任务
在大部分程序中一般都会需要用到后台任务, 比如定时更新缓存或更新某些状态.(ASP.NET Core 系列目录) 一.应用场景 以调用微信公众号的Api为例, 经常会用到access_token,官方 ...
- 利用sklearn对MNIST手写数据集开始一个简单的二分类判别器项目(在这个过程中学习关于模型性能的评价指标,如accuracy,precision,recall,混淆矩阵)
.caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...
- 强大的数据库工具 dbForge Studio ForMySql
优点: 1.可以将MySql数据库操作仿 sqlserver 的操作方式,便于操作 2.强大的比较拷贝能力.菜单栏上的 Comparison 的功能,可以比较两个数据库的差别,同时可以将数据库Copy ...
- Java小工具 根据文本批量修改文件名
功能 可以根据使用路径修改文件名,已经测试,可以成功运行 思路 先是读取到txt文本文件,之后使用String的spilt进行分割,每一行的格式为 旧名字 新名字,中间的空格可以使用|或者其他字符代替 ...