首页 > 代码库 > 第二章: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完成的任务。比如将列表转换为元组或者获取当前的时间和日期。完成这些操作的函数,我们称之为BIF)isinstance(),它允许检查某个特定标识符是否包含某个特定类型的数据:
>>> 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列表