好比说我要整理一个近期热映的电影列表:python
movies = ["venom", "My Neighbor Totor", "Aquaman"] print(movies) # ['venom', 'My Neighbor Totor', 'Aquaman'] print(len(movies)) # 3 print(movies[1]) # My Neighbor Totor
列表很像数组,但功能超越数组。列表都是从0开始的,python中列表无需事先声明类型。数组
从列表后面加上一个新的元素,好比说加个“无名之辈”,是append
方法。app
movies.append('A Cool Fish') print(movies) # ['venom', 'My Neighbor Totor', 'Aquaman','A Cool Fish']
删除列表最后一个元素:pop
方法。模块化
movies.pop() print(movies) # ['venom', 'My Neighbor Totor']
两个列表相衔接,用的是extend
方法。函数
movies.extend(['Dying To Survive', 'Detective Conan']) print(movies) # ['venom', 'My Neighbor Totor', 'Aquaman', 'Dying To Survive', 'Detective Conan']
我想在某个条件下删除一个元素,同时加上一个元素,涉及remove
和insert
方法。学习
movies.remove('venom') print(movies) # ['My Neighbor Totor', 'Aquaman'] movies.insert(len(movies),'venom') print(movies) # ['My Neighbor Totor', 'Aquaman','venom']
python中列表能够听任何类型的数据。code
处理列表须要各类迭代方法。是时候用for...in循环了模块化开发
for movie in movies: print(movie) # venom # My Neighbor Totor # Aquaman
同理while循环也是能够的对象
count=0 while count<len(movies): print(movies[count]) count+=1
通常都推荐for循环blog
列表固然也能嵌套,咱们能够用isinstance
方法检测之:
movies = ["venom", ["My Neighbor Totor", "Aquaman"]] print(isinstance(movies,list)) # True
若是我想把这个嵌套列表单独打印出来,能够这么操做
movies = ["venom", ["My Neighbor Totor", "Aquaman"]] for movie in movies: if isinstance(movie, list): for _movie in movie: print(_movie) else: print(movie) # venom # My Neighbor Totor # Aquaman
给这个列表再加一层:
movies = ["venom", ["My Neighbor Totor", ["Aquaman"]]]
用上节来处理多层嵌套,会致使大量重复而不优雅的代码。
首先使用函数让代码更加优雅:
movies = ["venom", ["My Neighbor Totor", ["Aquaman"]]] def flatten(_list): if(isinstance(_list, list)): for _item in _list: flatten(_item) else: print(_list) flatten(movies)
为了巩固所学:再举一个经过递归生成斐波拉契数列第N项的例子:
斐波那契数列(Fibonacci sequence),指的是这样一个数列:一、一、二、三、五、八、1三、2一、3四、……在数学上,斐波纳契数列以以下被以递推的方法定义:F(1)=1,F(2)=1, F(3)=2,F(n)=F(n-1)+F(n-2)(n>=4,n∈N*)
def fib(n): if n < 1: return 'error' if n == 1 or n == 2: return 1 else: return fib(n-1)+fib(n-2) print(fib(6)) # 8
虽然很简洁,可是n>100就报错了。由于python的递归支持100层
把上一章的flatten函数单独用base.py存起来,它就打包为一个模块。
除了以前提到的,用#
注释,还能够用三重"""
做为python的注释。
再同一个命名文件夹下从新建立一个app.py文件:
import base as util movies = ["venom", ["My Neighbor Totor", ["Aquaman"]]] print(util.flatten(movies)) # 预期结果
先学习如下内置的方法(BIF)
>>> id(b) 140588731085608
'5'
转化为5
>>>range(10) # 从 0 开始到 10 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> range(1, 11) # 从 1 开始到 11 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> range(0, 10, 3) # 步长为 3 , 迭代终点不超过10 [0, 3, 6, 9]
>>>seasons = ['Spring', 'Summer', 'Fall', 'Winter'] >>> list(enumerate(seasons)) [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')] >>> list(enumerate(seasons, start=1)) # 下标从 1 开始 [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
扁平化打印只能看到每一个数组最小的元素,考虑用缩进来体现彼此的关系。那怎么作呢?
提示:用range方法实现。
事实上在打印时只须要知道每次迭代的深度,就好处理了。所以须要引入第二个参数
# base.py def flatten(_list,level=0): if(isinstance(_list, list)): for _item in _list: flatten(_item,level+1) else: for step in range(level): print("\t", end='') print(_list)
# app.py import base as util movies = ["venom", ["My Neighbor Totor", ["Aquaman"]], ["My Neighbor Totor", ['000',["Aquaman"]]], 'aaa', ['Aquaman'],'sadas'] print(util.flatten(movies))
效果出来了。但还有不满意的地方。若是要兼容过去的写法怎么办?
def flatten(_list, count=False, level=0): if(isinstance(_list, list)): for _item in _list: flatten(_item,count,level+1) else: if count: for step in range(level): print("\t", end='') print(_list) else: print(_list)
调用时默认就是不缩进。