今天看Head First Python,虽然已经不是Python初学者的我对这本书尤为衷心,不仅仅是在论坛上很多人的推荐,而是它循序渐进的思路是和实际程序是相吻合的。
下面慢慢走进今天列表的主题:
列表的创建:movies = ["one","two","three"......]
-
列表的迭代
方法一简洁而不失风度,方式二比较繁杂,一般在实际项目中用到for循环的要一些,除非一开始指定循环的开始值。
""" 方法一""" for each in all : print(each) """方法二""" count = 0 while count < len(movies): print (movies[count]) count=count+1
iii.列表的列表(列表的嵌套)
movies = ["one","two","three",["The holy","name",[123,"123@","err"]]]
print(movies[3][1][1]) """试着判断结果""" for each in movies: print(each) """试着判断结果""" """结果为:one two three ["the holy","name",[123,"123@",en]]"""
这是因为for循环只能打印外列表的各个数据项。
iv. 那么现在的问题就来了,如何能够把内层的列表的值也输出来呢?
这里我们涉及到了 if-else机制(处理列表一项的时候查看这一项本身是不是另外一个的列表),特别重要的用到了isinstance()BIIF内置函数,该内置函数用来检查特定标识符是否包含某一个特定类型的数据。得到下列代码的改进:
for each in ndd: if isinstance(each,list): for nested in each: print(nested) else: print(each)
vi.处理多层循环列表:
#!/usr/bin/env python # encoding: utf-8 """ 处理多层嵌套循环 """ ndd = ["what","why","chen", [1222,"jie","vi", ["chenjie","jingjing", [2012,"chenjieaijingjing"]]]] print(ndd[3][3][2][1]) for each in ndd: if isinstance(each,list): for nested in each: if isinstance(nested,list): for what in nested: if isinstance(what,list): for why in what: if isinstance(why,list): print(why) else: print(what) else: print(nested) else: print(each)
vii: 重复而繁杂的for循环使你一看就觉得烦恼,也使得我们的程序可读性大大降低,我们在实际开发中肯定不能用这样的代码,其复杂度太大了上面的代码复杂度能达到n的三次方,所以我们急需一种机制能够使我们的代码简洁又能完成我们的任务。
于是,函数并应运而生,我们可以把循环写在函数里面,需要用到处理列表的时候就调用函数,从而得到下列程序代码:
#!/usr/bin/env python # encoding: utf-8 ndd = ["what","why","chen", [1222,"jie","vi", ["chenjie","jingjing", [2012,"chenjieaijingjing"]]]] """ 处理多层嵌套循环 通过函数方式压缩代码 """ def print_lol(the_list): for the_list_fun in the_list: if isinstance(the_list_fun,list): print_lol(the_list_fun) else: print(the_list_fun) print_lol(ndd)
以上就是递归加函数来处理多层循环列表的代码,我们可以把上面这个程序作为一个可重用代码块,可以在程序的其他地方应用。
本文出自 “ChenSvior-Knowledge” 博客,请务必保留此出处http://jackchenvior.blog.51cto.com/2200715/1361343