Python:for...in range() 、 for...in enumerate() 、for...in() 、for...in zip()的用法

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.csdn.net/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.csdn.net/zhangphil/article/details/90053306

  • 31
    点赞
  • 127
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值