Python
Python
目录
容器类型
可迭代对象泛操作
列表解析
也叫列表推导式
适用
- 使用:
[值 for i in L]
- 使用:
适用举例
[x^2 for x in range(10)]【Python特有】等价于
list[map(lambda x: x**2, range(10))]复杂点的举例:
[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]嵌套的举例:
[[row[i] for row in matrix] for i in range(4)]
适用范围:列表/元组/集合/字典
- (对于字典,要写完整的键值,例如
{x: x**2 for x in (2, 4, 6)})
- (对于字典,要写完整的键值,例如
len
- 使用举例
len(dict),返回可迭代对象的长度
- 适用范围:列表/字典/元组/集合/字符串
[]
- 使用举例
list[i]索引
- 适用范围:列表/字典/元组/集合/字符串
- (对于字典,中括号内容为键名,不可为序列)(本质是hash表)
- (对于列表,i 内容除了可以是序列,也可以是切片表达)
del
- 使用举例
del list[i],从列表删除元素、切片、全部del dict['key'],从字典删除键值对、全部
- 适用范围:列表/字典/集合
- (对于可迭代对象,可以不加[]序列,删除整个对象)
- (对于字典,中括号内容为键名)
- (对于列表,i 内容除了可以是序列,也可以是切片表达)
- (对于字符串和元组,不可编辑元素)
循环
- 适用举例
for i in list:
- 适用范围:列表/字典/元组/集合/字符串
- 对于字典,根据遍历对象的不同有不同写法,默认是遍历键
- 遍历字典键:
for k in dict.keys():,for k in dict: - 遍历字典值:
for v in dict.values(): - 遍历字典键值对:
for k,v in dict.items():
- 遍历字典键:
- 对于可迭代对象,根据遍历对象的不同也有不同的写法
- 只遍历项:
for item in list: print(item) - 遍历序列:
for i in range(len(list)): print(i, list[i]) - 遍历序列与值:
for i, v in enumerate(list): print(i, v)
- 只遍历项:
- 对于字典,根据遍历对象的不同有不同写法,默认是遍历键
顺序类(需要为线性序列对象)
list.sort(),对列表中的元素就地进行永久性排序,额外参数[reverse=False]list.sorted(),对列表中的元素就地进行临时性排序,额外参数[reverse=False]- 一般临时性排序可用于循环序列中倒叙输出
list.reverse(),就地倒排序列表中的元素
对象类型 > 列表
简概
- 性质
- 可变:不像不可变的字符串,列表是可变的,它允许修改元素,故可以对索引或切片进行赋值
- 任意类型:列表的元素不必是同一类型
- 使用基础(背后原理)
- 略
使用
字面量方式
对象方法(类方法)
list.append(X),在列表的末尾添加新的元素,相当于a[len(a):] = [x],a.insert(len(a), x)list.extend(L),将一个给定列表中的所有元素都添加到另一个列表中,相当于a[len(a):] = Llist.insert(i,x),在指定位置添加插入一个元素list.remove(x),删除列表中值为 x 的第一个元素。如果没有这样的元素,就会返回一个错误list.pop([i=len]),从列表的指定位置删除元素,并将其返回。如果没有指定索引,返回最后一个元素list.clear(),从列表中删除所有元素。相当于del a[:]list.index(x),返回列表中第一个值为 x 的元素的索引,相当于a[i],如果没有匹配的元素就会返回一个错误list.count(x),返回 x 在列表中出现的次数list.copy(),返回列表的一个浅拷贝。等同于a[:]
内置函数
len(list),返回列表长度del list[i],从列表删除元素、切片、甚至全部range(start,stop[,step]),快速创建等差数字列表,相当于[i for i in range(start,stop[,step])]
技巧
- 当堆栈用:使用
append()和pop()方法可以当堆栈用 - 当队列用:效率不高,在头部插入和弹出很慢(因为,为了一个元素,要移动整个列表中的所有元素)
要实现队列,使用 collections.deque,它为在首尾两端快速插入和删除而设计 - 遍历列表:
for i in list: - 拷贝:捋清楚:对象数据类型的赋值、浅拷贝和深拷贝三者的关系。具体详见其他笔记的编程术语一篇
- 当堆栈用:使用
原理
python的列表不仅不定长,而且还随意存储各种格式,存整型、浮点、字符串、甚至还可以嵌套list等其他容器。
在C++中如果想要实现相同的效果,可能需要用 Boost::any
原理
参考:https://cloud.tencent.com/developer/article/1820193
python中的容器对象真的不多,平常我们会很心安理得的根据需求来使用对应的容器,不定长数据用list,想去重用set,想快速进行匹配用dict,字符处理用str
简述
从细节上看,Python中的列表是由对其它对象的引用组成的连续数组。
这意味着,每次添加或删除一个元素时,由引用组成的数组需要该标大小(重新分配),当然,实际使用的是指数分配的方式。
对象类型 > 元组(元素不可变)
简概
- 性质
- 不可变性:就是相当于不可变的列表,其他和列表差不多
(存储元组的变量可变,元组元素不可变,为区别于常量其更贴切的说法是元素不可变性)
- 不可变性:就是相当于不可变的列表,其他和列表差不多
使用
字面量方式
元组字面量:用圆括号(
())来表示元组,并用逗号分隔,也可以不加括号例如
tuple = 123, 456, 'hello'创建包含零个或一个元素的元组:零个时不能省略圆括号,一个时可在后面加单个逗号
例如
empty_tuple = (),single_tuple = 'hello',
技巧
- 遍历元组:
for i in tuple:
- 遍历元组:
对象类型 > 字典
简概
- 性质
- 无序:用for遍历时顺序完全随机
使用
- 注意项
- 关键字可以为任意不可变类型,适用范围:字符串、数值、只包含字符串和数字的元组
- 字面量方式
- 字典字面量:
{k1:b1, k2:v2} - 字典增加或修改:
dict[key]=value
- 字典字面量:
- 对象方法(类方法)
dict.items(),返回键值对dict.keys(),返回键dict.values(),返回值
- 内置函数
len(dict),返回字典长度del dict['key'],从字典删除键值对set(dict),返回不重复的集合
对象类型 > 集合
简概
- 性质
- 无序:用for遍历时顺序完全随机
- 不重复
使用
- 字面量方式
- 集合字面量:
{}包裹,逗号隔开。也可以用set()方式创建- 但注意的是,如果创建空集合,只能用创建对象方式
set(),例如a = set() - (
set()本质是对象构造函数,也是类型转换方法,即构造函数用作转换函数并重载)
- 但注意的是,如果创建空集合,只能用创建对象方式
- 集合字面量:
- 对象方法(类方法)
union,联合intersection,交difference,差sysmmetric difference,对称差集
- 符号方法
set_a - set_b,差集set_a | set_b,并集set_a & set_b,交集set_a ^ set_b,非交集(交集的补集)
- 补充
- 集合对象还支持 union(联合),intersection(交),difference(差)和 sysmmetric difference(对称差集)等数学运算
对象类型 > 对象数据类型的嵌套
嵌套:列表、元组、字典、集合均允许嵌套列表
嵌套技巧
- 列表列表:嵌套分组
- 列表字典:有多种个体,每个个体有不同属性
- 字典列表:对象有多个属性,每个属性有多个选项
- 字典字典:对象有多个属性,每个属性有多个子属性
内置函数
zip()打包(一维打包成多维)
questions = ['name', 'quest', 'favorite color'] answers = ['lancelot', 'the holy grail', 'blue'] for q, a in zip(questions, answers): print('What is your {0}? It is {1}.'.format(q, a))
队列【外部类】
- 导入:
from collections import deque - 字面量方式
- 定义:例如
queue = deque(["2", "3", "4"])
- 定义:例如
- 对象方法
queue.append(X),末尾增加queue.popleft(),左侧弹出
链接到当前文件 0
没有文件链接到当前文件