Python 序列之列表
Python对象的相关术语
1、Python程序中保存的所有数据都是围绕对象这个概念展开的
程序中存储的所有数据都是对象
每一个对象都有一个身份、一个类型和一个值
例如,school="GNU Linux"会以"GNU Linux"创建一个字符串对象,其身份是指向它在内存中所处位置的指针(其在内存中的地址),而school就是引用这个具体位置的名称
对象的类型也称对象的类别,用于描述对象的内部表示及它支持的方法和操作
创建特定类型的对象时,有时也将该对象称为该类型的实例
实例被创建后,其身份和类型就不可变
如对象值是可以修改的,则称为可变对象 list dict
如果对象的值不可修改,则称为不可变对象
如果某个对象包括对其它对象的引用,则将其称为容器
大多数对象都拥有大量特有的数据属性和方法
属性:与对象相关的值 对象内部可用的变量;
方法:被调用时将在对象上执行某些操作的函数
使用点(.)运算符可以访问属性和方法
class :自定义类型
类: 数据和方法
数据:变量 私有;
方法:函数;处理数据的代码段 公共
type : 类型
对象的身份与类型
1、Python内置函数id()可以返回一个对象的身份,既该对象在内存中的位置
is运算符用于比较两个对象的身份
type()用于返回一个对象的类型
对象类型本身也是一个对象,称为对象类
该对象的定义是唯一的,且对于某类型的所有实例都是相同的
所有类型对象都有一个指定的名称,可用于执行类型检查,如list、dict
两个对象的比较
1、值比较,对象的数据是否相同
2、身份比较,两个变量名是否为同一对象
3、类型比较;两个对象的类型是否一致
if a is b: statements if a == b: statements if type(a) is type(b): statements 核心数据类型 数字: int,long,float,complex,bool 字符: str,unicode 列表: list 字典: dict 元组: tuple 文件: file 其它类型,(集合 set),frozenset,类类型None 其它文件类工具(pipes,fifos,sockets) 类型转换 str(),repr()或format():将非字符型数据转为字符 In [2]: num1 = 5.61 In [3]: type(num1) Out[3]: float In [4]: str(num1) Out[4]: '5.61' In [5]: type(num1) Out[5]: float In [6]: repr(num1) Out[6]: '5.61' In [7]: num2=repr(num1) In [8]: type(num2) Out[8]: str 运算符: 索引运算:[i] 切片运算:[i:j] 扩展切片:[i:j:stride] 支持运算: 索引、切片、min()、max()、len()等 列表:容器类型 任意对象的有序集合,通过索引范文其中的元素,可变对象,支持异构; 任意嵌套; 支持原处修改: 修改指定的索引元素,或修改指定的分片,删除语句,内置方法; l1 + l2 :合并两个列表,返回一个新的列表;不会修改原列表; l1 * N 把l1重复N此,返回一个新列表; 成员关系判断in;用法 item in container; In [17]: "x" in l6 Out[17]: True In [18]: "w" in l6 Out[18]: False l1 = [] print l1 id l1(l1) l2 = [1,2,3,4,5] print l2 l3 = [1,2,'b','d'] print l3 l4 = [[1,2],['a','b']] print l4 修改列表 l2[1]=32 print l2 l2[3]='xyz' In [22]: print l2 [1, 32, 3, 'xyz', 5] 删除列表中的元素 In [23]: l2[1:3] = [] In [24]: print l2 [1, 'xyz', 5] del(l2[1:]) print l2 id(l2) 使用内置方法append;向列表中添加元素 l3 = [1,2,3,4,5,6] l3.append(777) print l3 使用内置方法append;向列表中添加列表;添置之后;在源列表中;被添加进来的列表呈现只是一个单一元素; In [45]: l4 = ['x','b','y'] In [46]: l3.append(l4) In [47]: print l3 [1, 2, 3, 4, 5, 6, 777, ['x', 'b', 'y']] list.count 方法; help(list.count) In [3]: l3 = [1,1,1,1,2,2,2,2,2,3,3,3,4,5,6,7,8] In [4]: l3.count(1) Out[4]: 4 In [5]: l3.count(2) Out[5]: 5 list.extend方法向列表中添加元素;单一元素; In [7]: l4 = ['x','v','w'] In [8]: l3.extend(l4) In [9]: print l3 [1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 5, 6, 7, 8, 'x', 'v', 'w'] list.index方法; index(8)表示8在列表中第一次出现的位置; In [12]: l3.index(8) Out[12]: 16 In [13]: print l3 [1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 5, 6, 7, 8, 'x', 'v', 'w'] In [14]: l3.index('x') Out[14]: 17 help list.insert list.insert 方法; l4.insert(2,3333) print l4 l4.insert(1,3333) print l4 ['x', 3333, 'v', 3333, 'w'] l4.insert(0,222) print l4 [222, 'x', 3333, 'v', 3333, 'w'] list.insert 方法将列表中的数据元素弹出; In [25]: print l4 [222, 'x', 3333, 'v', 3333, 'w'] In [26]: l4.pop(0) Out[26]: 222 In [27]: l4.pop() Out[27]: 'w' In [28]: print l4 ['x', 3333, 'v', 3333] list.remove方法将列表中的数据元素去除; In [29]: print l4 ['x', 3333, 'v', 3333] In [31]: l4.remove(3333) In [32]: print l4 ['x', 'v', 3333] list.reverse() 方法;将列表中的数据元素原地翻转: print l4 ['x', 3333, 'v', 3333] In [33]: l4.reverse() In [34]: print l4 [3333, 'v', 'x'] list.sort 方法 In [1]: l5 = [1,4,6,12,2,3,51,34] In [2]: print l5 [1, 4, 6, 12, 2, 3, 51, 34] In [3]: l5.sort() In [4]: print l5 [1, 2, 3, 4, 6, 12, 34, 51] 列表相加+ 操作 :合并两个列表;返回一个新的列表;不会修改原列表; In [7]: id(l5) Out[7]: 28502784 In [8]: id(l4) Out[8]: 28522688 In [9]: l5 + l4 Out[9]: [1, 2, 3, 4, 6, 12, 34, 51, 'x', 'y', 'z', 'n'] In [10]: l6 = l4 + l5 In [11]: print l6 ['x', 'y', 'z', 'n', 1, 2, 3, 4, 6, 12, 34, 51] In [12]: id(l6) Out[12]: 28502496 字符串相加操作; In [13]: str1 = "Hello" In [14]: str2 = "World" In [15]: str1 + str2 Out[15]: 'HelloWorld' 将下标为1之后的数据元素更换成下面这个列表; In [22]: l6[1:] = [11111,22222] In [24]: print l6 ['x', 11111, 22222] 使用range生成一个列表 In [26]: xrange(10) Out[26]: xrange(10) In [27]: range(10) Out[27]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 列表复制其实有3种方法 1、指向内存中的内存对象为同一个; In [28]: l5 = l6 In [29]: id(l6) Out[29]: 28502496 In [30]: id(l5) Out[30]: 28502496 In [31]: print l6 ['x', 11111, 22222] In [32]: l6.append('asdasd') In [33]: print l6 ['x', 11111, 22222, 'asdasd'] In [34]: print l5 ['x', 11111, 22222, 'asdasd'] 2、列表赋值;指向不同的内存对象;内存对象复制; In [35]: l4 = l6[:] In [36]: l6.remove('x') In [37]: print l6 [11111, 22222, 'asdasd'] In [38]: print l4 ['x', 11111, 22222, 'asdasd'] 3、列表复制 In [41]: import copy In [42]: l5 = copy.deepcopy(l4) In [44]: id(l5) Out[44]: 29463760 In [39]: id(l4) Out[39]: 29463112 In [45]: print l5 ['x', 11111, 22222, 'asdasd'] In [46]: print l4 ['x', 11111, 22222, 'asdasd']
浙公网安备 33010602011771号