1.2.3.5. 高级循环
1.2.3.5.1 序列循环
你可以在任何序列上进行循环(字符、列表、字典的键,文件的行…):
In [14]:
vowels = 'aeiouy'
for i in 'powerful':
if i in vowels:
print(i),
o e u
In [15]:
message = "Hello how are you?"
message.split() # 返回一个列表
Out[15]:
['Hello', 'how', 'are', 'you?']
In [16]:
for word in message.split():
print word
Hello
how
are
you?
很少有语言(特别是科学计算语言)允许在整数或索引之外的循环。在Python中,可以在感兴趣的对象上循环,而不用担心你通常不关心的索引。这个功能通常用来让代码更易读。
警告:改变正在循环的序列是不安全的。
1.2.3.5.2 跟踪列举数
通常任务是在一个序列上循环,同时跟踪项目数。
- 可以像上面,使用带有计数器的while循环。或者一个for循环:
In [17]:
words = ('cool', 'powerful', 'readable')
for i in range(0, len(words)):
print i, words[i]
0 cool
1 powerful
2 readable
但是,Python为这种情况提供了enumerate关键词:
In [18]:
for index, item in enumerate(words):
print index, item
0 cool
1 powerful
2 readable
1.2.3.5.3 字典循环
使用iteritems:
In [19]:
d = {'a': 1, 'b':1.2, 'c':1j}
for key, val in d.iteritems():
print('Key: %s has value: %s' % (key, val))
Key: a has value: 1
Key: c has value: 1j
Key: b has value: 1.2
1.2.3.5.4 列表理解
In [20]:
[i**2 for i in range(4)]
Out[20]:
[0, 1, 4, 9]
练习
用Wallis公式,计算π的小数