之前专业课程设计,让写一个客户端和服务器的通讯录查询系统。大家都用C语言写的。只有我用python做的,当时感觉python这个东西挺有意思。但是仔细看了python之后会发现,其实我当时写出来的的,只不过是python版写的C语言而已。


给我的感觉就是,我是在用python在写C语言的程序,虽然是python的语句,可是思想却是按照C语言的流程在走。深入的学习下python却发现,其实python和C有着完全不同的风格。甚至完全不同的设计形式。当然这只是我这个python初学者的一点点小小的体悟而已啦。


初学python,我这个习惯了C的小菜鸟老是记不住好多复杂的方法和操作,这里对列表进行一下总结。以便日后学习。


其实我本来想先对python的所有数据类型做个小总结的,但是感觉并没有把握python全部变量设计的思想。只能先一样一样的进行总结。


列表是一种可变的数据类型,他由一系列的元素组成,这一系列可以使任何类型的元素,可以是不同类型的元素。列表,不过是一个有序的序列而已,用来组织一堆有规则或者无规则的数据。


1、列表创建和赋值:


list_name=[element1,element2,element3,...]


列表中可以添加任何类型的元素,如下的例子:


>>> list=[1,2.5,'a','abc',[5,6],(7,8)]

>>> print list

[1, 2.5, 'a', 'abc', [5, 6], (7, 8)]

如上,一个列表中可以添加整数、浮点数、字符、字符串、另一个列表、元组等各种不同的数据类型。


2、添加元素:


列表对象在Python中是List类,python为List类提供了append方法,用来在列表的尾部添加一个元素,如下:


>>> list_1=[1]

>>> list_1.append(2)

>>> list_1.append('hello')

>>> print list_1

[1, 2, 'hello']


append的参数类型为object,即可以为List添加任何类型的元素。使用点号来调用append方法。


List类还有一个方法insert,用于将元素插入到列表中指定索引的位置,语法如insert(index,value),即往index索引的位置插入值为value的元素,后边的元素依次往后移。如下:


>>> list_2=[1,2,3,4,5,6]

>>> list_2.insert(1,'hello')

>>> list_2.insert(4,'world')

>>> print list_2

[1, 'hello', 2, 3, 'world', 4, 5, 6]


3、删除元素:


列表的删除使用remove()方法,该方法用于移除列表中指定值的第一个匹配值。如果元素不存在,python将抛出ValueError异常。如下:


>>> list=[1,2,3,4,5]

>>> list.remove(3)

>>> print list

[1, 2, 4, 5]


从一个列表中删除元素还可以用del语句来实现,该语句将删除列表中指定索引位置的元素。如下:


>>> list=[1,2,3,4,5]

>>> del list[2]

>>> print list

[1, 2, 4, 5]


4、分片(slice)操作:


就像dota中每个英雄都有一个灵魂技能一样,我感觉分片操作就是列表的灵魂技能。这个操作可以随意的取出列表中的任何一部分。分片操作中有两个索引,指的是从第一个索引到第二个索引中所指定的所有元素(不包含第二个索引所指向的元素)。格式如:list_name[m:n]。


>>> list_1=['p','y','t','h','o','n']

>>> list_1[2:]=['q','t']

>>> print list_1

['p', 'y', 'q', 't']


如果没有指定分片的后一个索引,那么指的是从第一个索引元素到最后一个元素。


>>> list_1[2:2]=['h','e','l','l','o']

>>> print list_1

['p', 'y', 'h', 'e', 'l', 'l', 'o', 'q', 't']

接上边的代码,这里list_1[2:2],用一个与原序列不等长的序列将一个分片替换掉,这里替换的是一个空的分片。实际上的操作其实是插入了一个序列。


以此类推,使用这种方法来删除元素其实也是可行的。


5、负数索引:


在列表中让我感觉到跟普通的C数组最大不同的就是使用负数的索引。负数索引从列表的尾部开始计数,最尾端的元素索引表示为-1,然后依次往前是-2,-3....以此类推。


>>> test_list=['hello','world','python']

>>> print test_list[-2]

world

分片处理之中也是可以使用负数的索引的,其实我觉得python解释的时候负数与正数都是一样的,只是按照不同的规则表示的列表中的元素而已。


>>> test_list=[1,2,3,4,5,6]

>>> list_2=test_list[1:4]

>>> list_3=test_list[-3:-1]

>>> list_4=test_list[0:-2]

>>> print list_2

[2, 3, 4]

>>> print list_3

[4, 5]

>>> print list_4

[1, 2, 3, 4]


如上代码,有了负数索引的规定,其他的一切操作都是与正数相同的,我想这个机制大概只是为了让程序员更方便而定义的吧。


6、列表的连接:


列表连接总共有两种实现方式,一种是调用extend()方法,这个方法其实很简单,以一个列表作为参数,这个列表就是接在另一个列表之后的列表。


>>> list_1=[1,2,3,4,5]

>>> list_2=[6,7,8]

>>> list_1.extend(list_2)

>>> print list_1

[1, 2, 3, 4, 5, 6, 7, 8]


最神奇的的是,列表的连接甚至可以使用运算符+、+=或*。来进行列表操作。如下:


>>> list_1=[1,2,3]

>>> list_2=[4,5,6]

>>> list_3=list_1+list_2

>>> print list_3

[1, 2, 3, 4, 5, 6]

>>> list_1+=list_2

>>> print list_1

[1, 2, 3, 4, 5, 6]

>>> list_4=list_1*3

>>> print list_4

[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]


7、列表的查找:


这个就没啥技术含量了。。。无非就是按照index找value,按照value找index。

index()这个方法就是根据value找index的方法。返回值就是固定值对应的index。‘


>>> list_1=[4,3,2,1]

>>> print list_1.index(3)     #这句是根据value找index

1

>>> print list_1[3]           #这句是根据index找value

1

>>> 4 in list_1               #这是判断一个元素是否在列表中

True


8、列表的排序:


列表的排序需要使用List类中的sort()方法。sort方法并不是返回一个列表,是直接修改原来的列表。所以如果不想被修改的话最好有备份下。

sort()方法默认是按照升序排列的:


>>> list_1=[3,4,2,5,1]

>>> list_1.sort()

>>> print list_1

[1, 2, 3, 4, 5]

sort方法有一个可选的参数reverse,reverse是反转的意思。这个值默认是False,表示升序排序。如果设置为True,则进行降序排序。


刚才异想天开,sort方法对于不同的数据类型是怎么排序的呢?果断试了一下。。。


>>> list_1=[(9,1),'a','abc',5,4,2,7,8]

>>> list_1.sort()

>>> print list_1

[2, 4, 5, 7, 8, 'a', 'abc', (9, 1)]

事实证明python是先对不同的数据类型排序,然后对每种数据类型再进行分别排序的。


9、列表的反转:


reverse()方法用于将列表中的元素反向存放:


>>> list_1=[1,2,3,4,5]

>>> list_1.reverse()

>>> print list_1

[5, 4, 3, 2, 1]


总算码完了,累的手疼了。这样以后经常来看看应该就不会忘了。