标签:
列表也是序列的一种,所以对于列表的操作同样适用于列表。也可以通过下标或者切片操作来访问某一个或者某个子列表。那么列表和字符串有什么区别呢?首先字符串必须只能由字符组成,即便字符串中有数字,那也是字符类型的数字,不可直接用于数学计算,其次,字符串中的字符具有不可变性。但是列表是可以保留任意数目的Python对象的灵活容器,就像一个大箱子,什么对象都可以往里放。列表具有元素可变性,在序列中,列表是唯一一种支持元素可变性的数据结构。列表在形式上类似于C、Java中的数组,但与数组还是有很大区别的。数组必须要求数组类的元素具有唯一的数据类型,要么都是数字,要么都是字符等。
列表是由方括号[]来定义的。比如:aList = [123, ‘abc‘, 4.56, [‘inner‘, ‘list‘], 7-9j] 一个列表中包含整数类型,字符串类型、浮点类型、子列表、复数多种数据类型。
list(‘foo‘) ---->[‘f‘, ‘o‘, ‘o‘],将字符串类型转化成列表类型。
如何访问列表中的元素呢?aList[0] --->123 ,aList[3][1] --->‘list‘ ,有点二维数组的感觉。aList[:3] --->[123,‘abc‘,4.56]
aList[3] ---->[‘inner‘,‘list‘]
既然列表中的元素是可以改变的,那我们该如何更新列表中的元素呢?其实我们可以根据类似于数组操作,直接重新赋值即可,比如,aList[2]=5.67 --->aList = [123, ‘abc‘, 5.67, [‘inner‘, ‘list‘], 7-9j] ,还可以进行追加操作append(),举个例子,aList.append("hello Python!") ---->aList = [123, ‘abc‘, 4.56, [‘inner‘, ‘list‘], 7-9j,"hello Python!"]
列表可变,那么可以追加修改就可以删除,删除主要有两种方法,要么知道这个元素是什么,根据内容删除,要么根据下角标删除,删除形式分别是aList.remove(123), del aList[0]=====>aList = [‘abc‘, 4.56, [‘inner‘, ‘list‘], 7-9j]
我们还可以把for循环运用到列表里,[i * 2 for i in [8,-2,5]] ----->[16,-4,10] ,[i for i in range(8) if i % 2 == 0] ---->[0,2,4,6],其中range(8)=0,1,2,3,4,5,6,7,不包含8
下面介绍一些操作函数吧,
cmp(),作比较的,不过,由于列表中的元素数据类型不同,所以比较大小相对复杂一些,实际运用中相对复杂的地方使用较少,具体用法之前提到到就不说了,把比较规则简单说一下,大家了解一下就OK了,
1. 对两个列表的元素进行比较.
2. 如果比较的元素是同类型的,则比较其值,返回结果.
3. 如果两个元素不是同一种类型,则检查它们是否是数字.
a. 如果是数字,执行必要的数字强制类型转换,然后比较.
b. 如果有一方的元素是数字,则另一方的元素"大"(数字是"最小的")
c. 否则,通过类型名字的字母顺序进行比较.
4. 如果有一个列表首先到达末尾,则另一个长一点的列表"大".
5. 如果我们用尽了两个列表的元素而且所有元素都是相等的,那么结果就是个平局,就是说返回一个0.
和cmp()类似的还有max()/min(),由于数据类型的不一致,其精度都会随复杂度的升高而降低。
len()求长度,没啥说的,reversed()翻转列表的,sorted(),排序的,这里再强调一下,所谓的排序是字典顺序,或者你可以理解为ASCII顺序,T<s,因为大写字母T的ASCII码在小写字母s前面。
求和函数sum(),主要是春数值类型的, a = [4,5,6],sum(a) = 15. sum(a,5) = 20
list()和tuple(),等下章我们讲完元组,我们再重点说这个,列表和元组间转换还是使用频率挺高的,比如你需要把一个已有的元组转成列表类型的(然后你就可以修改它的元素了),或者相反.
在教材中还有两个实例分别利用列表模拟队列和堆栈这两种数据结构,主要是列表的追加和删除操作,我这里就不讲了,可以当个练习题自己试一试,学过数据结构的同学一看就能看明白。
标签:
原文地址:http://my.oschina.net/dfsj66011/blog/372265