首页 > 代码库 > 第二章:python列表

第二章:python列表

任何值得着手创建的程序都必然会处理数据。为了降低复杂性,通常可以把数据组织为列表。

 

使用括号中记号法访问列表数据

首先定义一个名字列表,然后使用print()在屏幕上显示这列表。。接下来,使用len()得到列表中有多少个数据项,然后再访问并显示第二个数据项的值:

>>> cast=["a","b","c"]
>>> print(cast)
[a, b, c]
>>> print(len(cast))
3
>>> print(cast[1])
b
>>> 

 

创建了列表之后,可以使用列表方法在列表末尾增加一个数据项(append()方法),或者从列表末尾删除数据(pop()方法),还可在列表末尾增加一个数据集合(利用extend()方法):

>>> cast.append("e")
>>> print(cast)
[a, b, c, e]
>>> cast.pop()
e
>>> print(cast)
[a, b, c]
>>> cast.extend(["f","g"])
>>> print(cast)
[a, b, c, f, g]

在列表中找到并删除一个特定的数据项(使用remove()方法),然后在某个特定的位置前面增加一个数据项(使用insert()方法):

>>> cast.remove(g)
>>> print(cast)
[a, b, c, f]
>>> cast.insert(0,g)
>>> print(cast)
[g, a, b, c, f]
>>> 

处理列表数据

这通常需要迭代处理列表,在这个过程中对每一个数据项完成某个动作。当然,可能经常怎样做(这种做法可行,但不具有伸缩性) :

>>> letter=[a,b]
>>> print(letter[0])
a
>>> print(letter[1])
b
>>> 

这个 代码会得到我们的预期结果,使列表的数据都出现在屏幕上。不过,如果以后修改代码,在列表中增加一个字母,以上代码就没有办法达到预期了,因为这个代码没有提到第三个数据项。

这有何难,只需增加一个print()语句,对不对?

但是,如果增加的字母非常多呢?这个增加的print()语句就会非常多,你不愿意这样,肯定会想办法逃避。

这样就用到了迭代

处理每一个列表项是一个常见的需求,所有python通过提供内置的for循环可以非常方便的做到这一点。可以用以下代码 ,这里重写了前面的代码来使用一个for循环:

>>> letter=[a,b]
>>> for each_flick in letter:
    print(each_flick)

    
a
b
>>> 

for循环处理任意大小的列表

python的for循环就是为了处理列表和python中的其他迭代结构。列表使python中做常用的迭代数据结构,需要迭代处理一个列表时,最好使用for循环:

 for循环的结构:                           for 目标标识符  in 列表

                                                         列表处理代码

for指示循环开始,出现在目标标识符前面

关键字in将目标标识符与列表分割开

冒号“ :”放在列表名后面,指示列表处理代码开始

列表处理代码必须在for循环下面缩进

 

列表处理代码被python程序员称为“组”(suite)。

除了使用for,还有一种候选方法,可以使用while循环编写迭代代码。

python代码区分大小写。

在列表中储存列表

我们已经看到,列表可以存放混合类型的数据。不过还有更棒的:列表能存放任何东西的集合,也可以包括其他列表。只需要根据需要把内列表嵌在外列表中:

letters=[a,b,c,[1,2,3]]

然后输出:

>>> letters=[a,b,c,[1,2,3]]
>>> print(letters)
[a, b, c, [1, 2, 3]]

这时候会发现并没有输出你想要的结果,就需要for循环来处理这个列表了:

>>> for each_item in letters:
    print(each_item)

    
a
b
c
[1, 2, 3]

这时候for只打印出了外列表的各个数据项,而嵌套在内列表中的下一层列表会原样打印。

目前for循环本身没有问题,但是循环代码并不完备。对于外围列表来说内部列表只是外列表中的一个列表项。这里我们需要一种机制来发现列表中的某一项实际是另一个列表,并采取适当的行动。

在列表中查找列表

如果一项确实是一个列表,那么在处理外列表中的下一项之前,先要处理这个列表。确定何时做什么可以采用if else模式。

我们需要一种方法来确定当前处理的列表本身项就是一个列表。可以用python内置的一个BIF(BIF(built-in functions) 顾名思义,就是Erlang内建函数。它们通常用来完成那此无法用Erlang完成的任务。比如将列表转换为元组或者获取当前的时间和日期。完成这些操作的函数,我们称之为BIFisinstance(),它允许检查某个特定标识符是否包含某个特定类型的数据:

>>> name=[wang,niu]
>>> isinstance(name,list)
True
>>> num_name=len(name)
>>> print(num_name)
2
>>> isinstance(num_name,list)
False
>>> 

代码解释:创建一个简短的列表,并把它赋至一个标识符name。

               询问name是否是一个列表。

               将一个数赋至一个标识符。

               查看标识符的数值 

               询问num_name是否是一个列表

 

第二章:python列表