这里写目录标题
Python可迭代对象
可迭代对象
:在Python中实现特殊方法_iter_()的类的对象称为可迭代对象。
可迭代对象具有惰性求值的特点
:只在必要时才会生成下一个值,每个值只会生成一次。
不支持下标访问
指定位置的元素:迭代器不持有任何元素,所以同时也不支持切片运算和内置函数len(),只能从前往后逐个生成值
迭代器对象有哪些:例如map,zip,enumerate,filter,生成器等
可迭代对象有哪些:包括迭代器对象,列表,元组,字典,集合,字符串和range对象。
注意:不要混淆可迭代对象和迭代器对象
3.1列表
特点:①可同时包含整数,实数,字符或者列表,元组,字典,元组以及其它任意对象。
②列表强大但负担重,应该少用。
1,创建:
①直接=:
alist=[1,'a','围棋']
alist=[]//空列表
②用list()直接转换(可转元组,range,str,dict,set或其它有限长度的可迭代对象)
2,删除
del命令:适用于所有类型变量
3,列表元素访问
类似于C语言数组,直接下标访问
4,常用方法
注意:某某方法的用是对象名.方法名(),函数则直接是函数名()
append(追加的元素):追加,无返回值
insert(下标index,元素):插入,无返回值
extend(可迭代对象):拓展,追加多个元素,无返回值
clear():删除列表所有元素,不影响列表的引用,无返回值
pop()
remove()
sort()
reserve()
5,列表对象支持的运算符(易忘)
+:对元素算数加法,对列表连接,可用+=等价于extend()
*:对元素算数乘法,对列表序列重复输入
6,列表内置操作函数
max(),min(),len(),zip():弄成元组,map(),any():是否有等价于true的元素。
7.列表推导式
(1)[表达式 for 变量 in 范围+操作 if 条件]:if 条件可不要。类似于
for(变量;范围,操作){表达式}
例如
(1)过滤
alit=[1,2,-1]
[i for i in alist if i>0]
[1,2]
(2)循环
alis=[x*x for x in range(10) //等价于
alist=[]
for x in range(10)
alist.append(x*x)
(2)嵌套循环
vec=[[1,2,3],[4,5,6][7,8,9]]
[num for elem in vec for num in elem] //等价于
vec=[[1,2,3],[4,5,6][7,8,9]]
result=[]
for elem in vec:
for num in elem //第一个为外循环,第二个为内循环
result.append(num)
result
[1,2,3,4,5,6,7,8,9]
(3再多一级的嵌套就不能用了)
8.切片操作:[ : : ]
[start=0:stop=end:step=1]
左闭右开,step为负数则反着操作
例如:
alist=[1,2,3,4,5]
alit[2:4:1]
alist
[3,4]
注意:alist[2:4:1]返回的是一个新列表原来,列表不变
使用切片增加元素
alist=[1,2]
alist[len(alist):]=[3]
alist
[1,2,3]
3.2元组
轻量级列表,只有一个元素时后面要+一个逗号
1.创建和访问
x=(1,2,3)
x[0]
1
x[-1]
3
x[1]=4
报错,元组不能改变
y=(1)
报错,要写成y(1,)
tuple(range(2))
(0,1)
2.元组和列表的区别
同:
①都支持下标
②支持技术count(),len(),index(),map(),filter()和+,*,+=,in
异:
①元组不可变序列,即不可增删改。(即没有append()这些)
②可以使用切片操作但是仅可用于访问其中元素
③内部做了优化比列表快
④元组可以作为字典的键使用,列表不行
3,生成器表达式
①与列表推导式相似,但是使用(),里面格式一样。
②返回结果属于迭代器对象(只在需要时生成新元素)
访问:使用__next__()方法或next(对象)进行遍历,或者for循环也行。
3.3,字典(dict)
1,①包含若干“键:值”的无序可变容器对象,表示一种映射关系。(也称为关联数组)
②字典的“键”可以为任意不可变数据,如整数,实数,复数,字符串,元组等可哈希数据,不能使用列表,集合,字典或其它可变类型。,键不可以重复,值可以。
2,方法
clear(),copy(),fromkey(对象作为键,value作为所有键的值【值就一个,多个键的话值都一样】),get(键,返回值):返回此键的值,否则返回自己设置的值。items()返回所有元素,keys()返回所有键,values():返回所有值的一个对象。pop(k,[,d]):删除k为键的元素并返回对应值,没有则返回k。
popitem():按后进先出(栈)顺序删除并返回一个元组。
3,4集合
1,无序可变序列,元素之间不可重复,集合可包含数字,字符串,元组等不可变类型数据(可哈希),不能以任何方式包含(注意是包含,不是转换)列表,字典,集合等不可变类型。不能调用hash()的都不能作为集合的元素。也不能作为字典的键。
2,集合推导式
3,5序列解包(连续赋值)
a,b=1,2 //等价于a=1,b=2