python基础学习day7
基础数据类型的补充;编码的进阶
str
capitalize() 首字母(第一个单词)大写,其余变小写
s1 = 'I LIVE YOU'
print(s1.capitalize())
>>>I live you
title() 每个单词的首字母大写。(以特殊字符(非字母)隔开的即为一个单词)
s1 = 'I LIVE YOU'
print(s1.title())
>>>I Live You
swapcase() 大小写反转
s1 = 'I love YOU'
print(s1.swapcase())
>>>i LOVE you
center() 居中,有1个必选参数:宽度,一个非必选参数:填充)
s1 = 'I'
print(s1.center(10,'%'))
>>>%%%%I%%%%%
find() 通过元素找索引,找到第一个就返回,找不到返回-1。
s1 = 'I love you'
print(s1.find('o'))
>>>3
index() 通过元素找索引,找到第一个就返回,找不到就报错。
tuple
特殊性:元祖中只有一个元素,并且没有’,‘,则它不是元祖,它与括号中的数据类型一致
tu0 = (1,2)
print(tu0,type(tu0))
>>>(1, 2) <class 'tuple'> tu1 = (1)
print(tu1,type(tu1))
>>>1 <class 'int'> tu2 = ([1])
print(tu2,type(tu2))
>>>[1] <class 'list'> tu3 = (1,)
print(tu3,type(tu3))
>>>(1, ) <class 'tuple'>
count() 计数
tu = (1,2,3,3,3,3)
print(tu.count())
>>>4
index() 找索引
tu = ['a','b','a']
print(tu.index('a'))
>>>0
list
index() 通过元素找索引
l1 = ['a','b','a']
print(l1.index('a'))
>>>0
sort() 默认从小到大排序,设置reverse参数则可从小到大
l1 = [3,2,1,4]
l1.sort()
print(l1)
>>>[1,2,3,4] l1.sort(reverse=True)
print(l1)
>>>[4,3,2,1]
reverse() 反转
l1 = [2,1,3,0]
l1.reverse()
print(l1)
>>>[0,3,1,2]
列表相加 (3.4以上版本)
l1 = [1,2,3]
l2 = [3,4,5]
print(l1+l2)
>>>[1, 2, 3, 3, 4, 5]
列表与数字相乘 (3.4以上版本)
l1 = [2,'a',[1,'b']]
l2 = l1*3
print(l2)
>>>[2, 'a', [1, 'b'], 2, 'a', [1, 'b'], 2, 'a', [1, 'b']]
列表的特殊性:正向循环一个列表时如果删除某个元素,那么这个元素后面的所有元素都会向前进一位,它们的索引相比之前也会前进一位,因此,在循环一个列表时的过程中,如果要改变列表的大小(增加值或者删除值),那么结果很可能会出错或者报错。
l1 = [1,2,3,4,5,6] #删除列表中索引位为偶数的元素。
for i in range(0,len(l1),2):
l1.pop(i)
print(l1)
>>>IndexError: pop index out of range
解决此问题有三种方式
1.直接删除 (按照元素删除,按照索引删除,切片加步长
#切片加步长
l1 = [1,2,3,4,5,6]
del l1[1::2]
print(l1)
2.倒叙删除
l1 = [1,2,3,4,5,6]
for i in range(len(l1)-1,-1,-2):
l1.pop(i)
print(l1)
>>>[1,3,5] #不能用以下代码;请自测
l1 = [1,2,3,4,5,6]
for i in range(1,len(l1),2):
l1.pop(-i)
3.思维转换
l1 = [1,2,3,4,5,6]
l2 = []
for i in range(0,len(l1),2):
l2.append(l1[i])
l1 = l2
print(l1)
dict
popitem 3.5版本之前,随机删除,3.6版本之后,删除最后一个,有返回值。 请自测。
update
dic0 = {1:'i'}
dic0.update(2='love',hobby='python') #增加键值对
print(dic0)
>>>{1: 'i', 2: 'love', 'hobby': 'python'} dic0.update(1 = '太阳') #改键值对
print(dic0)
>>>{1: '太阳', 2: 'love', 'hobby': 'python'} dic1 = {}
dic1.update([(1,'a'),(2,'b'),(3,'c')])
print(dic1)
>>>{1: 'a', 2: 'b', 3: 'c'} dic0.update(dic1)
print(dic0) #有则覆盖,无则增加
>>>{1: 'a', 2: 'b', 'hobby': 'python', 3: 'c'}
print(dic1)
>>>{1: 'a', 2: 'b', 3: 'c'}
fromkeys() 第一个参数必须为可迭代对象,可迭代的对象共用第二个参数(id相同)。
dic = dict.fromkeys('abc',1)
print(dic)
>>>{'a': 1, 'b': 1, 'c': 1} dic = dict.fromkeys([1,2,3],[])
print(dic)
>>>{1: [], 2: [], 3: []}
dic[1].append('a')
print(dic)
>>>{1: ['a'], 2: ['a'], 3: ['a']}
小题试做:(循环一个字典时,若果改变字典的大小则或报错。)
#将字典dic中的以‘k’开头的键值对删除
dic = {'k1':'a','k2':'b','k3':'c','a':'d'}
l1 = []
for key in dic:
if key.startswith('k'):
l1.append(key)
for i in l1:
dic.pop(i)
print(dic)
>>>{'a':'d'} #改进
for key in list(dic.keys()): #将其转换为一个列表,若不加list则回报错。
if 'k' in key:
dic.pop(key)
print(dic)
>>>{'a','d'}
数据之间类型的转换:
int bool str 三者转换
str list 两者转换
list set 两者转换
str bytes 两者转换
所有数据都可以转换成bool值:
转换成bool值为False的数据类型有:
'',0,(),{},[],set(),None
基础数据结构类型的总结
- 按照储存空间的占用分(从低到高)
- int
- str
- set : 无序
- tuple: 有序,不可变
- list: 有序,可变
- dict: 有序(3.6版本之后),可变
- 按照储存空间的占用分(从低到高)
编码的进阶:
不同的编码方式之间不能相互识别
数据在内存中全部是以Unicode编码的,但是当数据用于网络传输或者存储到硬盘中,必须是以非Unicode编码(utf-8、gbk等)
python中的数据从内存(Unicode编码)存储到硬盘或进行网络传输时要经历一个特殊的转化过程,要转化为一个非Unicode编码类型的特殊数据才能进行传输或储存至硬盘,即bytes类型(内存中的编码方式:非Unicode) 内存中的数据(int,bool,list,dict,set,tuple)都不能直接转换为bytes类型,是先自动转换为字符串(Unicode编码)类型,再转换为bytes类型。
- bytes与str的操作方式大部分都是一样的
- bytes can only contain ASCII literal characters,手动将中文字符串转化为bytes类型会报错,要经过特殊的转化
#str转bytes:
a = b'iloveyou'
print(a,type(a))
>>>b'iloveyou' <class 'bytes'> #将中文转化为bytes类型:
b = b'山就在那儿'
print(b)
>>>SyntaxError: bytes can only contain ASCII literal characters
#正确方法为: c = '山就在那儿'
b = c.encode('utf-8')
print(b) #or print(c.encode('utf-8')) #一般指定utf-8的编码形式, (encode:编码)
>>>b'\xe5\xb1\xb1\xe5\xb0\xb1\xe5\x9c\xa8\xe9\x82\xa3\xe5\x84\xbf'
bytes可转化为字符串类型(Unicode)(decode,解码)。用什么编码类型转换为bytes数据类型的就用什么解码。
b = b'\xe5\xb1\xb1\xe5\xb0\xb1\xe5\x9c\xa8\xe9\x82\xa3\xe5\x84\xbf'
c = b.decode('utf-8') or print(b.decode('utf-8'))
print(c)
>>>山就在那儿 #用什么编码类型转换为bytes数据类型的就用什么解码。
b = b'\xe5\xb1\xb1\xe5\xb0\xb1\xe5\x9c\xa8\xe9\x82\xa3\xe5\x84\xbf'
c = b.decode('gbk')
print(c)
>>>UnicodeDecodeError: 'gbk' codec can't decode byte 0xbf in position 14: incomplete multibyte sequence
小题试做:gbk转换为utf-8
#分析,所有的编码都与Unicode有关(计算机内存中以Unicode编码),因此可先将gbk转换为Unicode编码,再转换为utf-8编码。 gbk = b'\xc9\xbd\xbe\xcd\xd4\xda\xc4\xc7\xb6\xf9'
decode1 = gbk.decode('gbk') #解码为Unicode编码的字符串,可print(decode1)查看。
print(decode1.encode('utf-8')) #以utf-8编码
>>>b'\xe5\xb1\xb1\xe5\xb0\xb1\xe5\x9c\xa8\xe9\x82\xa3\xe5\x84\xbf'
python基础学习day7的更多相关文章
- Python基础学习Day7 基础数据类型的扩展 集合 深浅copy
一.基础数据类型的扩展 1.1GBK ---> UTF - 8 # str --->bytes s1 = '太白' # 字符串是unicode编码 b1 = s1.encode('gbk' ...
- Day1 Python基础学习
一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编写程序,本质仍然是直接操作 ...
- 0003.5-20180422-自动化第四章-python基础学习笔记--脚本
0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...
- Day1 Python基础学习——概述、基本数据类型、流程控制
一.Python基础学习 一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编 ...
- Python 基础学习 总结篇
Python 基础学习总结 先附上所有的章节: Python学习(一)安装.环境配置及IDE推荐 Python学习(二)Python 简介 Python学习(三)流程控制 Python学习(四)数据结 ...
- (一)python基础学习
根据廖雪峰老师的python教程写一些学习总结! Python基础学习 1.使用list和tuple (1)list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时 ...
- python基础学习(起步)
目录 python基础学习(起步) 变量 常量 变量的内存管理 python垃圾回收机制 变量的其他赋值方式 今日编程小题 本人能力有限,若有偏颇之处请读者大大不吝赐教! 祝大家每天都在成长! pyt ...
- Python基础学习二
Python基础学习二 1.编码 utf-8编码:自动将英文保存为1个字符,中文3个字符.ASCll编码被囊括在内. unicode:将所有字符保存为2给字符,容纳了世界上所有的编码. 2.字符串内置 ...
- Python基础学习一
Python基础学习一 1.变量与常量 变量名:大小写英文.数字.下划线的组合,数字不能开头 常量名:习惯上常量用大写字母命名,例如"PI" 2.多行输出 转义符:反斜杠(),如果 ...
随机推荐
- scarce|component|
ADJ-GRADED 缺乏的;不足的;供不应求的If something is scarce, there is not enough of it. Food was scarce and expen ...
- 吴裕雄--天生自然python学习笔记:Python3 SMTP发送邮件
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. python的smtplib提供了一 ...
- Kafka与RabbitMQ、ActiveMQ协议区别
对于Kafka与RabbitMQ.ActiveMQ协议,它们具体的区别如下: activemq: activemq支持主从复制.集群.但是集群功能看起来很弱,只有failover功能,即 ...
- centos7系统盘变为只读文件的修复
一台物理机的系统盘在磁盘空间有剩余的情况下变为只读了,咨询后发现前几日修改过系统,然后就不可写了,重启也不行.见下图 解决:参考链接https://bbs.51cto.com/thread-92640 ...
- 红灯区:DevOps 建设的思考和实践
点击关注"有赞coder" 获取更多技术干货哦- 作者:费解 团队:效能改进 背景 众所周知,在丰田精益生产中,核心观念包含对人的尊重.消除浪费.持续改善,只有这样,企业才能保持良 ...
- Centos7上pkg-config的安装
1.官网下载自己想要的版本,我这里下载的是目前最新版 https://www.freedesktop.org/wiki/Software/pkg-config/ 2.安装 tar xf XXX.tgz ...
- yii批量数据插入
yii框架批量插入数据有两种方法,第一种是循环多次插入和一次批量插入,第一种方法要注意插入数据中间有一次数据插入失败要注意回滚事务 循环插入数据 第一种方法 $model = new User(); ...
- 由uploadfive看servlet
一.uploadfive的使用 上传工具是程序设计中最常用的功能,其中,uploadfive插件使用比较多,此处该插件进行文件的上传操作.该插件是基于HTML5的,因此PC端和移动端都可以使用. 使用 ...
- 先治再扶,重灾区后的P2P你还敢投吗?
互联网强大的包容性和创新性,给予很多新生事物成长的空间.而其全面普及与快速传播的特性,也让任何事物都像被放在放大镜乃至显微镜下,几乎无形遁形.这样一来,新生事物很容易被"神化" ...
- 分布式系统一致性问题与Raft算法(上)
最近在做MIT6.824的几个实验,真心觉得每一个做分布式相关开发的程序员都应该去刷一遍(裂墙推荐),肯定能够提高自己的技术认知水平,同时也非常感谢MIT能够把这么好的资源分享出来. 其中第二个实验, ...