1 enumerate()函数
- enumerate()是python的内置函数
- enumerate在字典上是枚举、列举的意思
- 对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
- enumerate多用于在for循环中得到计数: for...in enumerate()
1.2 enumerate()用法
- 如果对一个列表,既要遍历索引又要遍历元素时,首先可以这样写:
list = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]
for index in range(len(list)):
print(index, list[index])
# result
/Users/i-mamba/opt/anaconda3/envs/DeepLearning/bin/python3.7 /Users/i-mamba/修仙之路/代码篇/手提包检测分割/codes/question.py
0 星期一
1 星期二
2 星期三
3 星期四
4 星期五
5 星期六
6 星期日
Process finished with exit code 0
- 上述方法有些累赘,利用enumerate()会更加直接和优美:
list = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]
for index, item in enumerate(list):
print(index, item)
# result
/Users/i-mamba/opt/anaconda3/envs/DeepLearning/bin/python3.7 /Users/i-mamba/修仙之路/代码篇/手提包检测分割/codes/question.py
0 星期一
1 星期二
2 星期三
3 星期四
4 星期五
5 星期六
6 星期日
Process finished with exit code 0
- enumerate还可以接收第二个参数,用于指定索引起始值,如:
list = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]
for index, item in enumerate(list, 1):
print(index, item)
# result
/Users/i-mamba/opt/anaconda3/envs/DeepLearning/bin/python3.7 /Users/i-mamba/修仙之路/代码篇/手提包检测分割/codes/question.py
1 星期一
2 星期二
3 星期三
4 星期四
5 星期五
6 星期六
7 星期日
Process finished with exit code 0
- 在深度学习的经常用于索引数据集:
import os
images = os.listdir('../data/train/images')
labels = os.listdir('../data/train/masks')
list = []
for i in range(len(images)):
list.append(
('../data/train/images/' + images[i], '../data/train/masks/' + labels[i])
)
for idex, (img, target) in enumerate(list):
print(idex, img, target)
# 等价于:
for idex in range(len(list)):
print(idex, list[idex])
# result:只展示了前10个索引
/Users/i-mamba/opt/anaconda3/envs/DeepLearning/bin/python3.7 /Users/i-mamba/修仙之路/代码篇/手提包检测分割/codes/question.py
0 ../data/train/images/63.jpg ../data/train/masks/63.jpg
1 ../data/train/images/189.jpg ../data/train/masks/189.jpg
2 ../data/train/images/77.jpg ../data/train/masks/77.jpg
3 ../data/train/images/162.jpg ../data/train/masks/162.jpg
4 ../data/train/images/176.jpg ../data/train/masks/176.jpg
5 ../data/train/images/88.jpg ../data/train/masks/88.jpg
6 ../data/train/images/348.jpg ../data/train/masks/348.jpg
7 ../data/train/images/360.jpg ../data/train/masks/360.jpg
8 ../data/train/images/406.jpg ../data/train/masks/406.jpg
9 ../data/train/images/412.jpg ../data/train/masks/412.jpg
10 ../data/train/images/374.jpg ../data/train/masks/374.jpg
两种循环写法是等价的,第一种更优美点。
参考:https://blog.youkuaiyun.com/churximi/article/details/51648388
2 for...in()
此函数只能遍历列表中的元素,不会获得索引值。
3 for...in zip()
在for循环里zip()函数用来并行遍历列表。
栗子:
s = ["1", "2", "3", "4", "5"]
t = ["a", "b", "c", "d", "e"]
for x, y in zip(s, t):
print(x+"-"+y)
print("######")
u = {"1", "2", "3", "4", "5"}
v = {"a", "b", "c", "d", "e"}
for x, y in zip(u, v):
print(x+"-"+y)
result:
1-a
2-b
3-c
4-d
5-e
######
1-e
2-c
4-d
5-a
3-b
参考:https://blog.youkuaiyun.com/zhangphil/article/details/90053306