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 ...
随机推荐
- Sublime Text3 C++ 设置
系统环境: 首先是 C++ 的环境设置, 先下载 CodeBlocks, 安装目录下有 MinGW, 直接复制到 C 盘下, 再在电脑中添加 环境变量(PATH). Sublime Text3 设置: ...
- Linux命令之control快捷键组合
***********************Linux系统中的一些control快捷键组合汇总如下************************ ctrl+a:光标移到行首. ctrl+b:光标左 ...
- wx.chooseImage
<view>上传图片</view> <view> <view> <button bindtap="getImg">上传图 ...
- Confluence 6 警告的类型
有下面的一些类型的警告. 警告和知识库(Alert and KB) 级别(Level) 默认阈值(Default threshold) 可配置(Configurable) Low free disk ...
- Confluence 6 MySQL 数据库设置准备
请查看 Supported Platforms 页面来获得 Confluence 系统支持的 MySQL 数据库版本.你需要在安装 Confluence 之前升级你的 MySQL 数据库. 如果你从其 ...
- Java之动手动脑(三)
日期:2018.10.12 星期五 博客期:017 这次留了两个动手动脑作业!我需要一个一个来说!先说第一个吧! Part 1 :随机生成1000个随机数 代码: //以下为 RandomMaker. ...
- jquery 的鼠标事件/淡入淡出/绑定
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Cpython支持的进程与线程
一.multiprocessing模块介绍 python中的多线程无法利用CPU资源,在python中大部分情况使用多进程.python中提供了非常好的多进程包multiprocessing. mul ...
- Python基础之关于表达式
初识表达式: 优雅.清晰和务实是python的核心价值观,如果想通过操作和处理一个序列(或其他的可迭代对象)来创建一个新 的列表时可以使用列表解析(List comprehensions)和生成表达式 ...
- django----多对多数据添加
class UserInfo(models.Model): """ 用户表:既有班主任也有老师 """ username = models. ...