一、枚举

  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. CSS集锦

    div内容自动换行:word-wrap:break-word;word-break:break-all;

  2. 前端 ---jQuery的补充

    15-jQuery补充   jquery内容补充 jquery除了咱们上面讲解的常用知识点之外,还有jquery 插件.jqueryUI知识点 jqueryUI 官网: https://jqueryu ...

  3. appium+java(四)微信公众号自动化测试实践

    前言 随着手机阅读的普遍应用,微信公众号阅读,更为普遍,微信和qq一样,都是基于腾讯自研X5内核,不是google原生webview(其实就是进行了二次定制).实质上也是混合应用的一种,现在很多app ...

  4. appium+java(二)appium初始化参数部分详解

    Capabilities介绍 实际上它的全称是:Desired capabilities Desired capability是一个JSON对象,包含一组key和value值.它由客户端发送给服务端, ...

  5. Django 笔记(三)模版路径 ~ 静态引用

    1.模版路径: 在 settings,py 里的 TEMPLATES = [] 内添加一句代码拼接路径 'DIRS': [os.path.join(BASE_DIR, 'templates')] 有两 ...

  6. Codeforces 1093E Intersection of Permutations [CDQ分治]

    洛谷 Codeforces 思路 一开始想到莫队+bitset,发现要T. 再想到分块+bitset,脑子一抽竟然直接开始写了,当然也T了. 最后发现这就是个裸的CDQ分治-- 发现\(a\)不变,可 ...

  7. Confluence 6 已经存在的 Confluence 安装配置一个数据源连接

    如果你希望在使用 JDBC 直接方式的应用中切换到使用数据源: 停止 Confluence. 备份下面的文件,以防止你可能需要重新恢复你的配置: <installation-directory& ...

  8. Confluence 6 让 Jira 应用停止发送通知到 Confluence

    你可能希望仅仅配置 Confluence 在 workbox 中仅仅显示自己的通知,禁用在 workbox 中显示从 Jira 来的通知.有可能这个 Jira 的应用已经通过应用链接功能正确链接到 C ...

  9. python之内置模块random(转载)

    转载自http://www.cnblogs.com/wcwnina/p/9281334.html random.seed(a=None, version=2) # 初始化伪随机数生成器,若种子a相同, ...

  10. plugin-barcodescanner 报错

    https://github.com/phonegap/phonegap-plugin-barcodescanner/issues/418 ionic cordova platform rm andr ...