1.List/tuple
python中没有多维数组的概念,所谓多维数组就是数组嵌套。
判断容器是否为空应该使用 if not xx 或者使用len()==0
not xx 和 is none 不是一回事
遍历有两种方法
for I in li
print(i)
for I range (len(li))
print( li[ I ] ) 需要用索引
tuple 不支持append方法,只读。
list需要根据索引来做删除元素。
2.dict
dict内部是一个哈希表,没有顺序。
判断元素是否存在是判断key是否存在。
如何遍历? 根据key来遍历或者根据key和value遍历。
3.set 集合
元素本身是没有重复的;使用list来进行初始化。
求并集:或操作;union生成一个新的set。
求交集:与操作;intersection 生成一个新的set。
求差集 A- A并B:-操作;difference 生成一个新的set。
求对称差 (A | B)-(A & B) 把两个集合相同的部分去除:^操作;symmetric_difference生成一个新的set。
添加元素 add
更新元素 update
删除元素 remove 必须知道元素的值
4.切片
[start : end :steps] >=start & <end 开区间
start默认是从第一个元素开始 end默认是到最后一个元素 step默认为1。
end超出大小按照实际大小来计算。
负值怎么处理? End负数会转化为实际所处的位置,step为负数倒着切片。
切片会生成一个新的对象,原list仍保持原样。
切片做快速反转。
5.列表推导
快速生成列表
深拷贝与浅拷贝
#浅拷贝
li_2d=[ [0] *3 ]*3
print(li_2d)
li_2d [0] [0] = 100
print(li_2d)
#深拷贝
li_2d=[ [0] *3 for i in range(3) ]
li_2d [0] [0] = 100
6.生成器
创建一个巨大的列表而仅仅只访问其中几个元素- 把真正的计算,推迟到实际使用时。不用到,不计算(惰性计算)。
列表推到时用()替代[]
遍历:next或for 循环
7.迭代器
可迭代和迭代器是两个概念
凡是可以用于for循环的对象,都是可迭代对象(Iterable类型的对象)。
凡是可以用于next()函数的对象,都是迭代器对象(Iterator类型的对象)。
str、list、tuple、dict、set类型数据都是可迭代对象,但是不是迭代器对象,它们可以通过iter()函数获得一个迭代器对象。
可迭代对象不一定是迭代器对象
但是迭代器对象一定是可迭代对象
迭代器对象不一定是生成器对象
但是生成器对象一定是迭代器对象
可迭代只需要满足for,但只有同时满足惰性计算,才是可迭代对象。因为生成器满足惰性计算,所以生成器一定是迭代器对象。
与生成器比较:生成器就是一个能返回迭代器的函数,其实就是定义一个迭代算法,可以理解为一个特殊的迭代器。调用这个函数就得到一个迭代器,生成器中的yield相当于一个断点,执行到此返回一个值后暂停,从而实现next取值。