Python学习(四) —— 编码
一、枚举
enumerate,for i in enumerate(可迭代对象),返回元组,内容是(序列号,可迭代的每一个元素)
for i,j in enumerate(可迭代对象,开始序列号),返回序列号,可迭代的每一个元素
a = 'abc'
b = {'a':1,'b':2}
for i in enumerate(a):
print(i)
#输出:
#(0, 'a')
#(1, 'b')
#(2, 'c') for i,j in enumerate(a,1):
print(i,j)
#输出:
#1 a
#2 b
#3 c
二、内存地址:id()
==比较的是值,is 比较的是内存地址
小数据池:int:-5~256
str:1.不能有空格
2.长度不能超过20
3.不能有特殊字符
a = []
b = []
print(a == b,a is b) #True False a = 'abc'
b = 'abc'
print(a == b,a is b) #True True a = '-6'
b = '-6'
print(a == b,a is b) #True False
三、编码
在python3中,str的表现形式为字符串,bytes的表现形式为b字符串,str的实际编码方式是unicode,bytes的编码方式是utf-8、gbk、gb2312...
在python3中,unicode:1个字符(无论中文、英文、数字),都用4个字节表示
utf-8:用最少的字节表示一个字符,英文占1个字节,欧洲文字占2个字节,亚洲文字占3个字节
gbk:英文占1个字节,中文占2个字节
在python3中,字符串存在内存中是unicode编码方式,不能直接传输或者存储在硬盘,要转成bytes类型,unicode转bytes:a.endode('编码方式'),bytes转unicode:a.decode('编码方式')
utf-8和gbk、gb2312等编码方式互不识别,如果要转化,要先解码(decode)成unicode方式,再编码(encode)成对应的方式。
a = 'abc'
b = a.encode('utf-8')
print(b,type(b)) #b'abc' <class 'bytes'> a = '你好'
b = a.encode('utf-8')
print(b,type(b)) #b'\xe4\xbd\xa0\xe5\xa5\xbd' <class 'bytes'>
c = b.decode()
print(c,type(c)) #你好 <class 'str'>
d = c.encode('gbk')
print(d,type(d)) #b'\xc4\xe3\xba\xc3' <class 'bytes'>
四、集合(set)
集合用{}表示,集合是无序、不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希。
特点:去重,把一个列表变成集合,就自动去重了;
关系测试,测试两组数据之前的交集、差集、并集等关系;
1、增:add(),update()(迭代着增加)
set1 = {1,2,3}
set1.add('abc')
print(set1) #{1,2,3,'abc'} set1 = {1,2,3}
set1.update('abc')
print(set1) #{1,2,3,'a'.'b'.'c'}
2、删:remove('元素')、pop():随机删除一个元素,并返回这个元素、clear():清空集合
set1 = {1,2,3,'a','b','c'}
set1.remove(1) #删除一个元素
print(set1) #{2,3,'a','b','c'} set1.pop() #随机删除一个元素
print(set1) #{3,'a','b','c'} set1.clear() #清空集合
print(set1) #set()
3、集合的其它操作
3.1、交集(& 或者 intersection)
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 & set2) # {4, 5}
print(set1.intersection(set2)) # {4, 5}
3.2、并集(| 或者 union)
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7,8}
print(set2.union(set1)) # {1, 2, 3, 4, 5, 6, 7,8}
3.3、差集(- 或者 difference)
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 - set2) # {1, 2, 3}
print(set1.difference(set2)) # {1, 2, 3}
print(set2 - set1) #{8, 6, 7}
print(set2.difference(set1)) #{8, 6, 7}
3.4、反交集(^ 或者 symmetric_difference)
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 ^ set2) # {1, 2, 3, 6, 7, 8}
print(set1.symmetric_difference(set2)) # {1, 2, 3, 6, 7, 8}
3.5、子集: < 或者 issubset 超集: > 或者 issuperset
set1 = {1,2,3}
set2 = {1,2,3,4,5,6} print(set1 < set2) # True
print(set1.issubset(set2)) # True print(set2 > set1) # True
print(set2.issuperset(set1)) # True
5、frozenset:不可变集合,让集合变成不可变类型
s = frozenset('barry')
print(s,type(s)) # frozenset({'a', 'y', 'b', 'r'}) <class 'frozenset'>
五、深浅copy
1、赋值运算
l1 = [1,2,3,['a','b']]
l2 = l1 l1[0] = 111
print(l1) # [11, 2, 3, ['a','b']]
print(l2) # [11, 2, 3, ['a','b']] l1[3].append('c')
print(l1) # [11, 2, 3, ['a','b','c']]
print(l2) # [11, 2, 3, ['a','b','c']]
对于赋值,指向的是同一个列表,所以更改l1的时候,l2也随之改变
2、浅拷贝:copy()
l1 = [1,2,3,['a','b']]
l2 = l1.copy() l1[0] = 111
print(l1) # [111, 2, 3, ['a','b']]
print(l2) # [1, 2, 3, ['a','b']],1没有改变 l1[3].append('c')
print(l1) # [111, 2, 3, ['a','b','c']]
print(l2) # [1, 2, 3, ['a','b','c']],列表里面的列表变了
对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。
3、深拷贝:copy.deepcopy(),pycharm需要import copy
import copy
l1 = [1,2,3,['a','b']]
l2 = copy.deepcopy(l1) l1[0] = 111
print(l1) # [111, 2, 3, ['a','b']]
print(l2) # [1, 2, 3, ['a','b']],1没有改变 l1[3].append('c')
print(l1) # [111, 2, 3, ['a','b','c']]
print(l2) # [1, 2, 3, ['a','b']],列表里面的列表也没有发生改变
对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变
Python学习(四) —— 编码的更多相关文章
- Python学习-字符编码, 数据类型
本篇主要内容: 字符编码 Python中的数据类型有哪些 类型的一些常用操作及方法 一.字符编码 编码解释的大部分内容摘自廖雪峰老师教程中的讲解,点击跳转. 简单介绍: 我们知道计算机只能处理数字,如 ...
- python 学习笔记-----编码问题
1.python 最早支持的是ASCII编码. 所以对于普通的字符串"ABC"为ASCII编码的形式.字母和数字之间的转换函数为ord('字母')和chr(‘数字’)函数. ord ...
- Python学习-字符编码浅析
1.什么是字符编码 既然是简述那肯定是简单明了.字符编码,看名字就是一种字符的编码格式,由于计算机内部采用二进制,想要将人类的语言字符输入到计算机就需要一种编码格式,这就是字符编码.字符------- ...
- Python学习---深入编码学习1225
1.1. Python2 Py2中只有2中数据类型,Str和Unicode,而且str中保存的是bytes,Unicode中保存的是unicode 一切我们能看到的明文都是unicode数据类型, b ...
- python学习四(处理数据)
head first python中的一个数据处理的例子 有四个U10选手的600米成绩,请取出每个选手跑的最快的3个时间.以下是四位选手的9次成绩 James 2-34,3:21,2.34,2.45 ...
- Python学习(2)——编码
今天写了个程序但是在DOS窗口和IDEL窗口调试的结果不一样,有些郁闷~ #!/usr/bin/env python #coding=utf-8 #python version:2.7.3 #syst ...
- Python学习(四) Python数据类型:序列(重要)
插播一下,先了解一下Python的数据类型,Python现有的数据类型有好多,最重要的有列表.元组.字典 列表:我觉得可以对应java中的数组 list=['physics', 'chemistry' ...
- Python学习(四):模块入门
1.模块介绍 模块:代码实现的某个功能的集合 模块分类: 自定义模块 内置标准模块 开源模块 模块的常用方法: 是否为主文件:__name__ == '__main__' 如果是直接执行的某程序,那么 ...
- Python学习四|变量、对象、引用的介绍
变量 变量创建:一个变量也就是变量名,就像a,当代码第一次赋值时就创建了它.之后的赋值将会改变已创建的变量名的值,从技术上讲,Python在代码运行之前先检测变量名,可以当成是最初的赋值创建了变量. ...
- Python学习之——编码方式
1.各种编码方式 ASCII:http://zh.wikipedia.org/zh-hans/ASCII Unicode:http://zh.wikipedia.org/zh-hans/Unicode ...
随机推荐
- 阿里云主机Nginx下配置NodeJS、Express和Forever
https://cnodejs.org/topic/5059ce39fd37ea6b2f07e1a3 AngularJS中文社区即运行在阿里云主机上,本站使用Nginx引擎,为了AngularJS,我 ...
- Android获取本机号码及运营商
import android.content.Context; import android.telephony.TelephonyManager; import android.util.Log; ...
- Jmeter之响应结果乱码解决
场景: 在测试过程中,我们可能需要查看结果树,但是发现里面的响应数据在“Document”以外的其他表现形式下都有乱码,如下图就是设置了以Text的形式展示,响应数据包含乱码: 分析:原因是Jmete ...
- MVC 基于 AuthorizeAttribute 实现的登陆权限控制
代码的执行顺序是 OnAuthorization–>AuthorizeCore–>HandleUnauthorizedRequest. 如果AuthorizeCore返回false时,才会 ...
- SpringCloud的版本
Spring Cloud 项目目前仍然是快速迭代期,版本变化很快.这里整理一下版本相关的东西,备忘一下. 大版本 版本号规则 Spring Cloud并没有熟悉的数字版本号,而是对应一个开发代号. C ...
- 前端PS切图
http://www.imooc.com/learn/506 慕课网地址 Tools Tools Photoshop 快捷键 l 移动工具 V l 选取工具 M l 套索工具 L l ...
- SpringMVC简介
一.SpringMVC 是什么? 后续编辑,先上Demo>> SpringMVCDemo
- Confluence 6 新 Confluence 安装配置一个数据源连接
如果在你的 Tomcat 中配置了数据源,并且Confluence 设置指南在安装的时候检测到这个配置的时候,配置数据源的选项将会提供给你进行配置.入股你希望使用数据源,请参考下面的配置. 1. 停止 ...
- vue 循环前十条数据
v-for="(item, index) in items" v-if="index<10"
- 补充的flask实例化参数以及信号
一.实例化补充 instance_path和instance_relative_config是配合来用的.这两个参数是用来找配置文件的,当用app.config.from_pyfile('settin ...