一、枚举

  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学习(四) —— 编码的更多相关文章

  1. Python学习-字符编码, 数据类型

    本篇主要内容: 字符编码 Python中的数据类型有哪些 类型的一些常用操作及方法 一.字符编码 编码解释的大部分内容摘自廖雪峰老师教程中的讲解,点击跳转. 简单介绍: 我们知道计算机只能处理数字,如 ...

  2. python 学习笔记-----编码问题

    1.python 最早支持的是ASCII编码. 所以对于普通的字符串"ABC"为ASCII编码的形式.字母和数字之间的转换函数为ord('字母')和chr(‘数字’)函数. ord ...

  3. Python学习-字符编码浅析

    1.什么是字符编码 既然是简述那肯定是简单明了.字符编码,看名字就是一种字符的编码格式,由于计算机内部采用二进制,想要将人类的语言字符输入到计算机就需要一种编码格式,这就是字符编码.字符------- ...

  4. Python学习---深入编码学习1225

    1.1. Python2 Py2中只有2中数据类型,Str和Unicode,而且str中保存的是bytes,Unicode中保存的是unicode 一切我们能看到的明文都是unicode数据类型, b ...

  5. python学习四(处理数据)

    head first python中的一个数据处理的例子 有四个U10选手的600米成绩,请取出每个选手跑的最快的3个时间.以下是四位选手的9次成绩 James 2-34,3:21,2.34,2.45 ...

  6. Python学习(2)——编码

    今天写了个程序但是在DOS窗口和IDEL窗口调试的结果不一样,有些郁闷~ #!/usr/bin/env python #coding=utf-8 #python version:2.7.3 #syst ...

  7. Python学习(四) Python数据类型:序列(重要)

    插播一下,先了解一下Python的数据类型,Python现有的数据类型有好多,最重要的有列表.元组.字典 列表:我觉得可以对应java中的数组 list=['physics', 'chemistry' ...

  8. Python学习(四):模块入门

    1.模块介绍 模块:代码实现的某个功能的集合 模块分类: 自定义模块 内置标准模块 开源模块 模块的常用方法: 是否为主文件:__name__ == '__main__' 如果是直接执行的某程序,那么 ...

  9. Python学习四|变量、对象、引用的介绍

    变量 变量创建:一个变量也就是变量名,就像a,当代码第一次赋值时就创建了它.之后的赋值将会改变已创建的变量名的值,从技术上讲,Python在代码运行之前先检测变量名,可以当成是最初的赋值创建了变量. ...

  10. Python学习之——编码方式

    1.各种编码方式 ASCII:http://zh.wikipedia.org/zh-hans/ASCII Unicode:http://zh.wikipedia.org/zh-hans/Unicode ...

随机推荐

  1. 阿里云主机Nginx下配置NodeJS、Express和Forever

    https://cnodejs.org/topic/5059ce39fd37ea6b2f07e1a3 AngularJS中文社区即运行在阿里云主机上,本站使用Nginx引擎,为了AngularJS,我 ...

  2. Android获取本机号码及运营商

    import android.content.Context; import android.telephony.TelephonyManager; import android.util.Log; ...

  3. Jmeter之响应结果乱码解决

    场景: 在测试过程中,我们可能需要查看结果树,但是发现里面的响应数据在“Document”以外的其他表现形式下都有乱码,如下图就是设置了以Text的形式展示,响应数据包含乱码: 分析:原因是Jmete ...

  4. MVC 基于 AuthorizeAttribute 实现的登陆权限控制

    代码的执行顺序是 OnAuthorization–>AuthorizeCore–>HandleUnauthorizedRequest. 如果AuthorizeCore返回false时,才会 ...

  5. SpringCloud的版本

    Spring Cloud 项目目前仍然是快速迭代期,版本变化很快.这里整理一下版本相关的东西,备忘一下. 大版本 版本号规则 Spring Cloud并没有熟悉的数字版本号,而是对应一个开发代号. C ...

  6. 前端PS切图

    http://www.imooc.com/learn/506    慕课网地址 Tools Tools  Photoshop 快捷键 l  移动工具 V l  选取工具 M l  套索工具 L l  ...

  7. SpringMVC简介

    一.SpringMVC 是什么? 后续编辑,先上Demo>> SpringMVCDemo

  8. Confluence 6 新 Confluence 安装配置一个数据源连接

    如果在你的 Tomcat 中配置了数据源,并且Confluence 设置指南在安装的时候检测到这个配置的时候,配置数据源的选项将会提供给你进行配置.入股你希望使用数据源,请参考下面的配置. 1. 停止 ...

  9. vue 循环前十条数据

    v-for="(item, index) in items" v-if="index<10"

  10. 补充的flask实例化参数以及信号

    一.实例化补充 instance_path和instance_relative_config是配合来用的.这两个参数是用来找配置文件的,当用app.config.from_pyfile('settin ...