处理列表数据
意志命运往往背道而驰,决心到最后会全部推倒。——莎士比亚
当数据量非常庞大,我们想获取到里面的数据该怎么办
比如上个单元的存储的电影数组,要是上千条的数据,依据上单元的方法,只能一条条加,但是这样效率太低了.所以我们要引入一个新的概念 循环 也有人管这个叫迭代
For 循环
- 循环就是重复做一件事。比如每天都要吃饭,这件事可以看成循环
For 循环处理任意大小的列表
- 基本语法
for 目标 in 数组 :
具体的操作数组的代码
首先 for in 关键字 后面必须有”:” 在 Python 中 没有大括号一说,他靠的都是空白符 也就是缩进,来表示在循环体内部还是外部
- 循环出内容
arr = ['这个杀手不太冷', '唐人街探案', '囧妈', '杀死比尔', '蓝色生死恋', "终结者", "复仇者联盟"]
for _item in arr:
print(_item)
print("over")
- 最后结果
这个杀手不太冷
唐人街探案
囧妈
杀死比尔
蓝色生死恋
终结者
复仇者联盟
over
- 循环出序号和内容,则必须要变成枚举 利用 enumerate(数组,开始的序号)
arr = ['这个杀手不太冷', '唐人街探案', '囧妈', '杀死比尔', '蓝色生死恋', "终结者", "复仇者联盟"]
for index, val in enumerate(arr, 0):
print(str(index)+"---"+val)
# 这里index是数字 所以前面必须加 str转一下变成字符串,int转一下变成数字
# 结果
# 0---这个杀手不太冷
# 1---唐人街探案
# 2---囧妈
# 3---杀死比尔
# 4---蓝色生死恋
# 5---终结者
# 6---复仇者联盟
- 也可以通过序号来循环这里就必须要用到一个函数 range
range 函数就是随机的生成与一系列的数字.它包前不包后 他支持 3 个参数(起始,结束,步长)
arr = [{"name": "鼠", "value": 25}, {'name': '牛', 'value': 35}]
for index in range(len(arr)):
print(arr[index])
# 结果
#{'name': '鼠', 'value': 25}
#{'name': '牛', 'value': 35}
在列表中存储列表
- 后面可以无限接中括号[]
arr2 = ['这个杀手不太冷', 1978, '唐人街探案', 1983, [
'囧妈', ['杀死比尔', '蓝色生死恋', ["终结者", '复仇者联盟']]]]
print(arr2[4][1][2][0])
# 结果
# 终结者
在列表中查找列表
- 基础版本,但是重复代码非常多这个时候我们就需要引入函数的概念
for index, item in enumerate(arr2, 0):
if type(item) is list:
print(item)
for index, _item in enumerate(item, 0):
if type(_item) is list:
print(_item)
for index, content in enumerate(_item, 0):
if type(content) is list:
print(content)
for index, result in enumerate(content, 0):
if index == 0:
print(result)
print("over")
# 结果
# 终结者
# over
在 Python 中创建一个函数
- Python 中的函数是一个命名的代码组,如果需要,还可以有一个参数表(可选)
函数定义
- 要用 def 语句定义一个 Python 函数,为函数提供一个函数名,并在括号里指定一个参数表,参数表也可以为空,如下
def 函数名 (参数):
函数代码组
- 针对上面那个循环 我们可以使用递归的方法来优化代码
arr2 = ['这个杀手不太冷', 1978, '唐人街探案', 1983, [
'囧妈', ['杀死比尔', '蓝色生死恋', ["终结者", '复仇者联盟']]]]
def printresult(arr2):
count = 0
for index, item in enumerate(arr2, 0):
if type(item) is list:
print(item)
printresult(item)
else:
count += 1
if count == len(arr2):
print(arr2[0])
print("一切都结束了")
printresult(arr2)
'''
结果
['囧妈', ['杀死比尔', '蓝色生死恋', ['终结者', '复仇者联盟']]]
['杀死比尔', '蓝色生死恋', ['终结者', '复仇者联盟']]
['终结者', '复仇者联盟']
终结者
一切都结束了
'''