1.序列:序列的概念
包含若干个元素,元素有序排列,可以通过下标来访问一个或者多个元素,这样的对象,Python就统一称为序列(Sequence)。
Python中以下的对象都属于序列。
》字符串
》列表
》元组
同是序列,他们的使用方式有很多相同之处。
序列类型操作符
》in/not in :判断一个元素是否存在于序列之中,返回布尔值
》连接操作符(+);把两个相同类型的序列进行连接。(连接操作符的往往并不高效(创建新对象,把原有的对象拷贝出去),对于列表,推荐使用extend来完成这样的操作;对于字符串,推荐使用join这样的操作)
2.列表和元组类似于C语言中的数组。
使用[]来表述列表,使用()来表示元组。列表和元组能够保存任意数量,任意类型的Python对象。可以使用下标来访问里面的元素,下标从0开始,最后一个下标为-1,可以使用[:]切片操作得到列表或者元组的子集,这个动作和字符串操作是一样的。列表和元素唯一的区别是,列表中的元素可以修改,但元组中的元素不可以修改(同样不可以改的还有string )。(另外,对于切片语法来说,下标越界也没有关系,因为取得是前闭后开区间,区间中的元素,能取多少取多少。)
切片操作的扩展[::],除了可以表示子序列的起始和结束位置,还可以表示‘步长’
如下例子
下面是一个更有趣的例子
字符串的翻转
(1)列表的详细用法
使用for循环将生成的值放在一个列表中
还可以搭配使用if
下面我们用列表实现一个栈和队列
栈
队列
关于列表的深浅拷贝
有下面这样一个例子
首先可以从结果中看到b和a 其实是同一个对象,而d,c 已经是新的列表对象了。
修改a[0]可以看到,a和b的值不受影响,但是d,c不受影响
再修改a[3][0]这时候可以发现c,d 的内容也收到了影响。
我们打印出a[3][0]的ID。可以发现其实是同一个对象,打印出id 证明了我们的猜想。
我们可以得出结论:
列表的赋值(=),切片操作([:]),list工厂函数,都在进行浅拷贝。
浅拷贝是指,虽然我重新的创建出了一个新对象,但新对象里面包含的子对象,和原来的子对象是同一个对象。
相应的深拷贝就是指,重新创建了一个新对象,同时这个新对象的子对象,也是重新创建出的一份新的拷贝对象。
如果我们要避免其中一份数据修改,会影响到其他数据的结果。我们就要用深拷贝。可以调用函数b=copy.deepcopy(a)这时b就是a 的深拷贝。(不只针对于列表)
注意:不是调用就一定会执行深拷贝,解释器会自己判断,如根本就不可能修改的就不会进行深拷贝。
(2)关于元组不可变得深层理解
不可变指的是元组的子对象的标识不可以变,如果元组中有可变元素,那么可变元素就是可变的
忘记打print a
为什么列表不可以替代元组呢?
1,当不想把数据搞乱时,元组会更安全。
2.在字典中Key必须是不可变得,所以必须是元组。
2.字典
Python中的映射数据类型,存储键值对,存储键值对(key-value),几乎所有类型的python对象都可以用作键,不过一般还是数字和字符串最常用,字典用{}表示字典。
上面就是基本的使用方法
下面是一种常用的构造字典的方法
首先要介绍一个函数zip,这个函数的功能可以看下面的例子
可以看到,事实上zip可以理解成矩阵的行列变换。
这样一个字典就完成了。