什么是可迭代?
1、它是能够一次返回一个成员的对象,也就是可以 for…in 遍历的;
2、所有的序列类型(也就是后面要说到的 Sequence),都是可迭代对象,如 list、str、tuple,还有映射类型 dict、文件对象等非序列类型也是可迭代对象;
不可迭代的对象:数字类型int float complex等。
#查是否可遍历:
import collections
nums = []/()/...
result = isinstance(nums,collections.Iterable)
print(result)
列表生成:
1、直接生成:l = range(0,10)生成0-9的列表
2、由一个变成另一个:s=[表达式 for 元素 in 原列表 if ...]
列表常用操作:
增加:.extend(iterable);.append(object) 改变原列表;.insert(index,object)在目标位置增加Object,会改变原列表;乘法和加法(列表只能与列表相加)与字符串相同
删除:del,del(index);.pop(index = -1)删除index位置的元素并返回被删除的元素,index默认是-1也就是列表中的最后一个元素。这两个都会改变原列表
改:list[index]=xx
查:list[index];list.index(object,start,end);list.count(obect);list[::]
遍历列表:
for item in list
print(item)结果是元素;
for index in range(len(list)):
print(index,list[index])结果是索引 元素;
由list创建索枚举对象:就是把可遍历的数据对象组合为一个索引序列并且把下标和数据同时输出
enumerate(seq[,start=0])start:下标起始位置
l=['a','b','c']
print(s=enumerate(l,1))
[(1,'a'),(2,'b'),(3,'c')]
遍历枚举对象:
①for index,value in s:
print(index,value)
1 a
2 b
3 c
②生成迭代器:
iterL=iter(s)
print(next(iterL)):使用next调用这个迭代器 结果是1 a
print(next(iterL)):2 b
或者
for item in iterL:
print(item) 结果是1 a
print(item) 2 b
生成的迭代器本身也可迭代。
这两个命令输出相同。
不能多次使用,只能使用一次(使用一次之后指针已经到要被遍历的集合以外了)
排序:
1、sorted(可迭代对象,key,reverse)reverse默认是false,升序。不会改变原列表
res=sorted(l)
print(res,l)返回的是新列表
如果列表里面是元组[(a,b),(c,d)]默认按第一个元素进行比较,也就是a和c比较,如果第一个元素相同,才进行下一个元素比较。那么怎么指定元素呢?
l = [1, 3, 2, 6, 4, 5]
l = [("sz", 18), ("sz2", 16), ("sz1", 17), ("sz3", 15)]
def getKey(x):
return x[1]
res = l.sort(key=getKey, reverse=True)
print(res, l)
2、sort 会改变原列表
res=sort(l)
print(res,l)结果是none和排好序的l
乱序:
import random
res = random.shuffle(l)会改变原列表
反转:
1.reverse 会改变原列表
res = l.reverse(l)
2.切片
res=l[::-1]
不改变原列表 res就是反转后的新列表