集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1733|回复: 0

给深度学习入门者的Python快速教程基础篇之十三

[复制链接]
4798345 发表于 2017-5-22 18:25:58 | 显示全部楼层 |阅读模式
for循环

上面提到的4种容器类型都是可遍历的,所以该讲讲用来遍历的for循环了。for循环的语法也是简单的英语:
a = ['This', 'is', 'a', 'list', '!']
b = ['This', 'is', 'a', 'tuple', '!']
c = {'This': 'is', 'an': 'unordered', 'dict': '!'}

# 依次输出:'This', 'is', 'a', 'list', '!'
for x in a:
print(x)

# 依次输出:'This', 'is', 'a', 'tuple', '!'
for x in b:
print(x)

# 键的遍历。不依次输出:'This', 'dict', 'an'
for key in c:
print(key)

# 依次输出0到9
for i in range(10):
print(i)

注意到每个for循环中,print都有缩进,这是Python中一个让人爱恨交织的特点:强行缩进来表明成块的代码。这样做的好处是代码十分清晰工整,还有助于防止写出过长的函数或者过深的嵌套,坏处是有时候不知为什么tab和空格就一起出现了,又或是多重if-else不知怎得就没对齐,还是挺麻烦的。

回到for循环上,这种把每个元素拿出来的遍历方式叫做for_each风格,熟悉Java的话就不会陌生,C++11中也开始支持这种for循环方式。不过如果还是需要下标呢?比如遍历一个list的时候,希望把对应下标也打印出来,这时可以用enumerate:
names = ["Rick", "Daryl", "Glenn"]

# 依次输出下标和名字
for i, name in enumerate(names):
print(i, name)

需要注意的是,通过取下标遍历当然是可行的,比如用len()函数获得列表长度,然后用range()/xrange()函数获得下标,但是并不推荐这样做:
words = ["This", "is", "not", "recommended"]

# not pythonic
for i in xrange(len(words)):
print(words[i])

在使用for循环时,有时会遇到这样一种场景:我们需要对遍历的每个元素进行某种判断,如果符合这种判断的情况没有发生,则执行一个操作。举个例子某神秘部门要审核一个字符串列表,如果没有发现不和谐的字眼,则将内容放心通过,一种解决办法是下面这样:
wusuowei = ["I", "don't", "give", "a", "shit"] # 无所谓

hexie = True # 默认和谐社会
for x in wusuowei:
if x == "f**k":
print("What the f**k!") # 发现了不该出现的东西,WTF!
hexie = False # 不和谐了
break # 赶紧停下!不能再唱了

if hexie: # 未发现不和谐元素!
print("Harmonious society!") # 和谐社会!

这样需要设置一个标记是否发现不和谐因素的状态变量hexie,循环结束后再根据这个变量判断内容是否可以放心通过。一种更简洁不过有些小众的做法是直接和else一起,如果for循环中的if块内的语句没有被触发,则通过else执行指定操作:
wusuowei = ["I", "don't", "give", "a", "shit"]

for x in wusuowei:
if x == "f**k":
print("What the f**k!")
hexie = False
break
else: # for循环中if内语句未被触发
print("Harmonious society!") # 和谐社会!

这样不需要一个标记是否和谐的状态变量,语句简洁了很多。
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-5-29 18:10 , Processed in 0.060069 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表