记录我的 python 学习历程-Day07 基础数据类型进阶 / 数据类型之间的转换 / 基础数据类型总结 / 编码的进阶
基础数据类型
- str(字符串) - str:补充方法练习一遍就行 - s.capitalize() 首字母大写,其余变小写 - s = 'dyLAn'
 print(s.capitalize()) # Dylan
 
- s.swapcase() 大小写翻转 - s = 'dYLAN'
 print(s.swapcase()) # Dylan
 
- s.title() 每个单词首字母大写(单词之间可以是特殊字符或者空格或者数字) - s = 'dylan is good man'
 print(s.title()) # Dylan Is Good Man
 
- s.center() 居中 - s = 'dylan'
 print(s.center(20)) # dylan (默认是空格填充)
 print(s.center(20, '@')) # @@@@@@@dylan@@@@@@@@
 
- s.find() 通过元素找索引,如果有重复的,找到第一个就返回,找不到返回 ‘-1’ - s = 'dylan'
 print(s.find('a')) # 3
 print(s.find('b')) # -1
 
- s.index() 通过元素找索引,如果有重复的,找到第一个就返回,找不到报错 - s = 'dylan'
 print(s.index('a')) # 3
 print(s.index('b')) # 报错
 # 报错如下:
 Traceback (most recent call last):
 File "/Users/yaoyaoba/Full_stack_22/day07/练习.py", line 8, in <module>
 print(s.index('b'))
 ValueError: substring not found
 
 
- tuple(元组) -  元组中如果只有一个元素,并且没有逗号,那么它不是元组,它与该元素的数据类型一致。 - tu = (2, 3, 4)
 print(tu, type(tu)) # (2, 3, 4) <class 'tuple'>
 tu = (2)
 print(tu, type(tu)) # 2 <class 'int'>
 tu = ('Dylan')
 print(tu, type(tu)) # Dylan <class 'str'>
 tu = ([1, 2, 3])
 print(tu, type(tu)) # [1, 2, 3] <class 'list'>
 - tu.count() 统计某个元素在元组中出现的次数 - tu = (1, 2, 3, 3, 3, 2, 2, 3,)
 print(tu.count(3)) # 3
 
- tu.index() 通过元素找索引,如果有重复的,找到第一个就返回 - tu = (1, 2, 3, 3, 3, 2, 2, 3,)
 print(tu.index(3)) # 2
 
 
- list(列表) - li.count() 统计某个元素在列表中出现的次数 - li = ['q', 'w', 'e', 'w', 'e', 'r', 't', 'y']
 print(li.count('w')) # 2
 
- li.index() 从列表中找出某个值第一个匹配项的索引位置(找不到会报错) - li = ['Dylan', 'yaoyao', 'man', 'girl', 'man']
 print(li.index('Dylan')) # 0
 print(li.index('aa')) # 报错
 
- li.sort() 在原位置对列表进行排序 - li = [3, 4, 2, 5, 7, 9, 8, 1]
 li.sort() # 它没有反回值,所以只能打印 li
 print(li) # [1, 2, 3, 4, 5, 7, 8, 9]
 li.sort(reverse=True) # 加个参数 就变成从大到小排序了.
 print(li) # [9, 8, 7, 5, 4, 3, 2, 1]
 
- li.reverse() 将列表中的元素反转排序 - li = [3, 4, 2, 5, 7, 9, 8, 1]
 li.reverse() # 它没有反回值,所以只能打印 li
 print(li) # [1, 8, 9, 7, 5, 2, 4, 3]
 
- 列表相加 - l1 = [3, 4, 2, 5, 7, 9, 8, 1]
 l2 = ['Dylan', 'yaoyao', 'man', 'girl', 'man']
 print(l1 + l2) # [3, 4, 2, 5, 7, 9, 8, 1, 'Dylan', 'yaoyao', 'man', 'girl', 'man']
 
- 列表与数字相乘 - l1 = [3, 4, 2, 5, 7, 9, 8, 1]
 l2 = l1 * 3
 print(l2) # [3, 4, 2, 5, 7, 9, 8, 1, 3, 4, 2, 5, 7, 9, 8, 1, 3, 4, 2, 5, 7, 9, 8, 1]
 
- 相关练习 - li = [3, 4, 2, 5, 7, 9, 8, 1]
 # 索引为奇数对应的元素删除(不能一个一个删除,此l1只是举个例子,里面的元素不定)。
 # 正常思路:
 # 先将整个列表的索引整出来。
 for index in range(len(li)):
 if index % 2 == 1:
 li.pop(index)
 print(li) # 会报错,因为超出了索引范围 # 最简单的方法
 li = [3, 4, 2, 5, 7, 9, 8, 1]
 del li[1: :2] # 通过切片删
 print(li) # [3, 2, 7, 8] # 倒着删
 for index in range(len(li)-1,-1,-1):
 if index % 2 == 1:
 li.pop(index)
 print(li) # [3, 2, 7, 8] # 思维置换
 li = [3, 4, 2, 5, 7, 9, 8, 1]
 new_li = []
 for index in range(len(li)):
 if index % 2 = 0:
 new_li.append(l1[index])
 l1 = new_li
 print(li) # [3, 2, 7, 8] # 总结:
 # 循环一个列表时,最好不要改变原列表的大小,这样会影响你的最终结果。
 
 
- dict(字典) - dic.popitem() 3.5版本之前,popitem为随机删除,3.6之后为删除最后一个,有返回值 - dic = {'name': 'Dylan', 'age': 16}
 ret = dic.popitem()
 print(ret,dic) # ('age', 16) {'name': 'Dylan'}
 
- dic.update() 更新或增加 (非常重要) - # 直接增加键值对
 dic = {'name': 'Dylan', 'age': 16}
 dic.update(sex = '男', height = 178)
 print(dic) # {'name': 'Dylan', 'age': 16, 'sex': '男', 'height': 178} # 更新己有键值对
 dic = {'name': 'Dylan', 'age': 16}
 dic.update(age=33)
 print(dic) # {'name': 'Dylan', 'age': 33} # 元组拆包增加键值对 (面试会考)
 dic = {'name': 'Dylan', 'age': 16}
 dic.update([(1, 'a'), (2, 'b'), (3, 'c')])
 print(dic) # {'name': 'Dylan', 'age': 16, 1: 'a', 2: 'b', 3: 'c'} # 更新,有则覆盖,无则添加
 dic = {'name': 'Dylan', 'age': 16}
 dic1 = {'age': 33, 'sex': 'man'}
 dic.update(dic1)
 print(dic) # {'name': 'Dylan', 'age': 33, 'sex': 'man'}
 
- dic.fromkeys() 键来自一个可迭代对象且值共用 - dic = dict.fromkeys('abc', 100)
 print(dic) # {'a': 100, 'b': 100, 'c': 100} 注意这里的值是共用的一个 id dic = dict.fromkeys([1, 2, 3], 'Dylan')
 print(dic) # {1: 'Dylan', 2: 'Dylan', 3: 'Dylan'} # 这有个坑,注意,面试题
 dic = dict.fromkeys([1, 2, 3], [])
 print(dic) # {1: [], 2: [], 3: []}
 dic[1].append(123) # 因为是共用的值,所以改变一个,其它的也都会变
 print(dic) # {1: [123], 2: [123], 3: [123]}
 
- 练习题 - # 将字典中键含有'k'元素的键值对删除。
 dic = {'k1': 'Dylan', 'k2': 'xian', 'k3': '男', 'age': 14} # 入坑思路:
 dic = {'k1': 'Dylan', 'k2': 'xian', 'k3': '男', 'age': 14}
 for key in dic:
 if 'k' in key:
 dic.pop(key)
 print(dic) # 报错了
 # 注意:循环一个字典时,如果改变这个字典的大小,就会报错,这是坑。 # 换个思路,我们把循环出来带有'k'的键放到一个列表中,再用列表循环删字典里的键
 dic = {'k1': 'Dylan', 'k2': 'xian', 'k3': '男', 'age': 14}
 li = []
 for key in dic:
 if 'k' in key:
 li.append(key)
 for i in li:
 dic.pop(i)
 print(dic) # {'age': 14} # 再来个简单的
 dic = {'k1': 'Dylan', 'k2': 'xian', 'k3': '男', 'age': 14}
 for key in list(dic.keys()): # {'k1': 'Dylan', 'k2': 'xian', 'k3': '男', 'age': 14}
 if 'k' in key:
 dic.pop(key)
 print(dic) # {'age': 14}
 
 
数据类型之间的转换
 目前学到的数据类型有:int / bool / str / list / tuple / dict / set ,这些数据类型之间都可以互相转换,而有些转换是非常重要的,有些则基本不用。
- int / bool / str 三者间的转换 - # int ----> bool
 i = 100
 print(bool(i)) # True 非零即 True
 i1 = 0
 print(bool(i1)) # False 零即是 False # bool ----> int
 t = True
 print(int(t)) # 1 True = 1
 f = False
 print(int(f)) # 0 False = 0 # int ----> str
 i = 100
 print(str(i)) # '100' # str ----> int 全部由数字组成的字符串才可以转化成数字
 s = '90'
 print(int(s)) # 90 # str ----> bool
 s1 = 'Dylan'
 s2 = ''
 print(bool(s1)) # True 非空即 Treu
 print(bool(s2)) # False # bool ----> str # 没有什么实际意义
 t1 = True
 t2 = False
 print(str(t1)) # True
 print(str(t2)) # False
 
- str / list 两者转换 - # str ----> list
 s = 'Dylan is good man'
 print(s.split()) # ['Dylan', 'is', 'good', 'man'] # list ----> str
 li = ['Dylan', 'is', 'good', 'man']
 print(' '.join(li)) # Dylan is good man
 
- list / set 两者转换 - # list ----> set
 li = ['Dylan', 'is', 'good', 'man']
 print(set(li)) # {'is', 'Dylan', 'good', 'man'} # set ----> list
 set1 = {'is', 'Dylan', 'good', 'man'}
 print(list(set1)) # ['Dylan', 'good', 'man', 'is'] 注意转换过来的是无序的
 
- str / bytes 两者转换 
- # str ----> bytes
 s = '海洋'
 print(s.encode('utf-8')) # b'\xe6\xb5\xb7\xe6\xb4\x8b' # bytes ----> str
 b = b'\xe6\xb5\xb7\xe6\xb4\x8b'
 print(b.decode('utf-8')) # 海洋
 
- 所有数据都可以转化成bool值 - '', 0, (), {}, [], set(), None
 
基础数据类型总结
- 按存储空间的占用区分(从低到高) - 数字
 字符串
 集合:无序,即无序存索引相关信息
 元组:有序,需要存索引相关信息,不可变
 列表:有序,需要存索引相关信息,可变,需要处理数据的增删改
 字典:有序,需要存key与value映射的相关信息,可变,需要处理数据的增删改(3.6之后有序)
 
- 按存值个数区分 - 标量/原子类型 - 数字,字符串 - 容器类型 - 列表,元组,字典 
- 按可变不可变区分 - 可变 - 列表,字典 - 不可变 - 数字,字符串,元组,布尔值 
- 按访问顺序区分 - 直接访问 - 数字 - 顺序访问(序列类型) - 字符串,列表,元组 - key值访问(映射类型) - 字典 
编码的进阶
- ASCII码:包含英文字母,数字,特殊字符与01010101对应关系。
a 01000001 一个字符一个字节表示。
- GBK:只包含本国文字(以及英文字母,数字,特殊字符)与0101010对应关系。
a 01000001 ascii码中的字符:一个字符一个字节表示。
中 01001001 01000010 中文:一个字符两个字节表示。
- Unicode:包含全世界所有的文字与二进制0101001的对应关系。
a 01000001 01000010 01000011 00000001
b 01000001 01000010 01100011 00000001
中 01001001 01000010 01100011 00000001
- UTF-8:包含全世界所有的文字与二进制0101001的对应关系(最少用8位一个字节表示一个字符)。
a 01000001 ascii码中的字符:一个字符一个字节表示。
To 01000001 01000010 (欧洲文字:葡萄牙,西班牙等)一个字符两个字节表示。
中 01001001 01000010 01100011 亚洲文字;一个字符三个字节表示。
- 不同的密码本之间不能互相识别。 
- 数据在内存中全部是以Unicode编码的,但是当你的数据用于网络传输或者存储到硬盘中,必须是以非Unicode编码(utf-8,gbk等等)。 - 英文: - str: 'hello ' -  内存中的编码方式: Unicode -  表现形式: 'hello' - bytes : -  内存中的编码方式: 非Unicode -  表现形式:b'hello' 
- 中文: - str: -  内存中的编码方式: Unicode -  表现形式:'中国' - bytes : -  内存中的编码方式: 非Unicode # Utf-8 -  表现形式:b'\xe4\xb8\xad\xe5\x9b\xbd' - # str ---> bytes
 s1 = '中国'
 b1 = s1.encode('utf-8') # 编码
 print(b1,type(b1)) # b'\xe4\xb8\xad\xe5\x9b\xbd'
 #b1 = s1.encode('gbk') # 编码 # b'\xd6\xd0\xb9\xfa' <class 'bytes'> # bytes---->str
 b1 = b'\xe4\xb8\xad\xe5\x9b\xbd'
 s2 = b1.decode('utf-8') # 解码
 print(s2)
 - # gbk ---> utf-8
 b1 = b'\xd6\xd0\xb9\xfa'
 s = b1.decode('gbk')
 # print(s)
 b2 = s.encode('utf-8')
 print(b2) # b'\xe4\xb8\xad\xe5\x9b\xbd'
 
 
记录我的 python 学习历程-Day07 基础数据类型进阶 / 数据类型之间的转换 / 基础数据类型总结 / 编码的进阶的更多相关文章
- 记录我的 python 学习历程-Day02-while 循环/格式化输出/运算符/编码的初识
		一.流程控制之--while 循环 循环就是重复做同一件事,它可以终止当前循环,也可以跳出这一次循环,继续下一次循环. 基本结构(基本循环) while 条件: 循环体 示例 # 这是一个模拟音乐循环 ... 
- 记录我的 python 学习历程-Day03 数据类型 str切片 for循环
		一.啥是数据类型  我们人类可以很容易的分清数字与字符的区别,但是计算机并不能呀,计算机虽然很强大,但从某种角度上看又很傻,除非你明确的告诉它,1是数字,"汉"是文字,否则它是分 ... 
- 记录我的 python 学习历程-Day06  is  id  == / 代码块 / 集合 / 深浅拷贝
		一.is == id 用法 在Python中,id是内存地址, 你只要创建一个数据(对象)那么就会在内存中开辟一个空间,将这个数据临时加载到内存中,这个空间有一个唯一标识,就好比是身份证号,标识这个空 ... 
- 记录我的 python 学习历程-Day05 字典/字典的嵌套
		一.字典的初识 为什么要有字典 字典与列表同属容器型数据类型,同样可以存储大量的数据,但是,列表的数据关联性不强,并且查询速度比较慢,只能按照顺序存储. 什么是字典 先说一下什么叫可变与不可变的数据类 ... 
- 记录我的 python 学习历程-Day13 匿名函数、内置函数 II、闭包
		一.匿名函数 以后面试或者工作中经常用匿名函数 lambda,也叫一句话函数. 课上练习: # 正常函数: def func(a, b): return a + b print(func(4, 6)) ... 
- 记录我的 python 学习历程-Day03 列表/元组/rang
		一.列表初识 列表是 Python 的基础数据类型之一,它是以''[ ]''的形式括起来的,每个元素用","隔开,属于容器型数据类型,他可以存放大量的.各种类型的数据. 基本格式 ... 
- 记录我的 python 学习历程-Day12 生成器/推导式/内置函数Ⅰ
		一.生成器 初识生成器 生成器的本质就是迭代器,在python社区中,大多数时候都把迭代器和生成器是做同一个概念. 唯一的不同就是: 迭代器都是Python给你提供的已经写好的工具或者通过数据转化得来 ... 
- 记录我的 python 学习历程-Day08 文件的操作
		文件操作的初识 用 python 代码对文件进行各种操作. 基本构成: 文件路径:path 打开方式:读.写.追加.读写.写读-- 编码方式:utf-8 / gbk / gb2312-- f = op ... 
- 记录我的 python 学习历程-Day11 两个被忽视的坑、补充知识点、函数名的应用、新版格式化输出、迭代器
		补充知识点 函数形参中默认参数的陷阱 针对不可变数据类型,它是没有陷阱的 def func(name, sex='男'): print(name) print(sex) func('Dylan') # ... 
随机推荐
- Lab8:文件系统
			文件系统的概念 文件系统是操作系统中管理持久性数据的子系统,提供数据存储和访问功能 文件是具有符号名,由字节序列构成的数据项集合 文件系统的功能 分配文件磁盘空间 管理文件块(位置和顺序) 管理空闲空 ... 
- 彻底搞懂CSS伪类选择器:is、not
			本文介绍一下Css伪类:is和:not,并解释一下is.not.matches.any之前的关系 :not The :not() CSS pseudo-class represents element ... 
- Js获取宽高度的归纳总结
			首先,先吓唬一下我们的小白们!在js中的描述宽高的可以细分有22种. window.innerWidth //除去菜单栏的窗口宽度 window.innerHeight//除去菜单栏的窗口高度 win ... 
- Java数组使用以及foreach循环
			Java数组使用以及foreach循环 二话不说,先甩一个简单的程序: final int NUM= 10; int[] arrays = new int[NUM]; System.out.print ... 
- 【翻译】Orleans 3.0 发布
			aaarticlea/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUF ... 
- 【集训Day2】字符串
			字符串(string) [问题描述] 给一个字符串T,问在字符串T 中可以包含最多多少个不重叠的字符串S. 字符串中的每个字符为小写或者大写字母. [输入格式] 第一行输入一个字符串S. 第二行输入一 ... 
- PHP基于Redis实现轻量级延迟队列
			延迟队列,顾名思义它是一种带有延迟功能的消息队列. 那么,是在什么场景下我才需要这样的队列呢? 一.背景 先看看一下业务场景: 1.会员过期前3天发送召回通知 2.订单支付成功后,5分钟后检测下游环节 ... 
- wordpress 获取指定作者或者文章的所有评论数量
			wordpress 获取指定作者或者文章的所有评论数量 <?php $args = array( 'post_author' => '' // fill in post author ID ... 
- 最小生成树与最短路径--C语言实现
			接昨天,在这里给出图的其中一种应用:最小生成树算法(Prime算法和Kruskal算法).两种算法的区别就是:Prime算法以顶点为主线,适合用于顶点少,边密集的图结构:Kruskal算法以边为主线, ... 
- KETTLE教程实战
			kettle初探 Kettle简介:Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行,数据抽取高效稳定.Kettle 中文名称叫水壶,该项目的主程 ... 
