列表
迭代对象
zip对象
zip()函数的用法
list(zip([1,2,3],[‘a‘,‘b‘,‘c‘]))
结果是
[(1, ‘a‘), (2, ‘b‘), (3, ‘c‘)]
就是依次取出每一个数组的元素,然后组合
操作数可以更多
zip([1,2,3],[‘a‘,‘b‘,‘c‘],[4,5,6])也是可以的
如果元素长度不一致会被砍到一样长
另外zip(*list)也就是数组前面带个星号,是上述操作的逆操作
zip(*[(1, ‘a‘), (2, ‘b‘), (3, ‘c‘)])的结果是[1,2,3],[‘a‘,‘b‘,‘c‘]
zip(*list) 逆操作
枚举enumerare(x)//
map()函数可以将一个函数依次作用到序列或迭代器对象的每一个元素中。
标准库functools中函数reduce()可以将一个接受两个参数的函数以累积的方式从左到右依次作用到一个序列或迭代器对象的所有元素中
列表乘法表示列表元素重复并生成新列表,不对原列表进行任何修改
列表的加法表示合并列表元素并生成新列表.
sort()函数
sort(x,key=规则,reverse=false/true)函数是对列表进行排序
x.sort()默认是升序,reverse=false,此排序是在原列表基础下进行排序。
x.sorted()是排好序后另建立一个列表,原列表没有影响。
如果直接使用reversed(x)返回的是一个逆序排列后的迭代对象,此时需要加list(reversed(x)))
sort()和reverse()是对列表进行原地排序,属于列表对象函数。用法为x.sort() x.reversed()
sorted()和reserved()是内置函数。用法为排好序后新建 sorted(x) reversed(x)
len(x)列表对象的个数
列表推导式
在逻辑上相当于一个循环
[表达式 for 变量 in 序列或迭代对象]
相当于
>>>x=[] >>>for i in range(5) x.append(i*i) >>>
列表推导式实现镶嵌列表的平铺
相当于
x=[[1,2,3],[4,5]] result=[] for a in x: for num in a: result.append(num) print(result)
作业:
1.求分数最高的同学的名字,最低分,最低分
scores={"张三":88,"李四":80,"王五":90} highscore=max(scores.values()) lowscore=min(scores.values()) averg=sum(scores.values())/len(scores) highpeople=[name for name,score in scores.items() if score==highscore] print("最高分同学的名字为",highpeople)
2.实现列表的矩阵倒置
列表表示法:
mat=[[1,2,3],[4,5,6],[7,8,9]]
>>>[[row[i] for row in mat] for i in range(len(mat))]
等价于:
1 mat=[[1,2,3],[4,5,6],[7,8,9]] 2 result=[] 3 for i in range(len(mat)): 4 temp=[] 5 for row in mat: 6 temp.append(row[i]) 7 result.append(temp)
切片
x[a:b:c]
a表示起始位置,默认为0,b表示结束位置,不包含b,默认为列表长度,c表示切片的步长,默认为1,当步长省略时,最后一个冒号可以省略
x[::-1]表示逆序
字典
字典快速推导式建立符合条件的字典
>>>x=["a","b","c"]
>>>y=[1,2,3]
>>>{i:j for i,j in zip(x,y)}
{"a":1,"b":2,"c",3}
字典的运用
统计字符串每个字符出现的位置
import string d="nbfjfbv cmxdfjcshdvfb cnbdbsjzfdjhvfhf" a=dict() for ch in d: a[ch]=a.get(ch,0)+1 print(a)
结果截图:
使用collection模块中的Counter类快速实现
from collections import Counter d="fjgfkfngngnk" frequences=Counter(d) print(frequences.items())
结果截图: