1.2.3.5. 高级循环

1.2.3.5.1 序列循环

你可以在任何序列上进行循环(字符、列表、字典的键,文件的行…):

In [14]:

  1. vowels = 'aeiouy'
  2. for i in 'powerful':
  3. if i in vowels:
  4. print(i),
  1. o e u

In [15]:

  1. message = "Hello how are you?"
  2. message.split() # 返回一个列表

Out[15]:

  1. ['Hello', 'how', 'are', 'you?']

In [16]:

  1. for word in message.split():
  2. print word
  1. Hello
  2. how
  3. are
  4. you?

很少有语言(特别是科学计算语言)允许在整数或索引之外的循环。在Python中,可以在感兴趣的对象上循环,而不用担心你通常不关心的索引。这个功能通常用来让代码更易读。

警告:改变正在循环的序列是不安全的。

1.2.3.5.2 跟踪列举数

通常任务是在一个序列上循环,同时跟踪项目数。

  1. - 可以像上面,使用带有计数器的while循环。或者一个for循环:

In [17]:

  1. words = ('cool', 'powerful', 'readable')
  2. for i in range(0, len(words)):
  3. print i, words[i]
  1. 0 cool
  2. 1 powerful
  3. 2 readable

但是,Python为这种情况提供了enumerate关键词:

In [18]:

  1. for index, item in enumerate(words):
  2. print index, item
  1. 0 cool
  2. 1 powerful
  3. 2 readable

1.2.3.5.3 字典循环

使用iteritems

In [19]:

  1. d = {'a': 1, 'b':1.2, 'c':1j}
  2. for key, val in d.iteritems():
  3. print('Key: %s has value: %s' % (key, val))
  1. Key: a has value: 1
  2. Key: c has value: 1j
  3. Key: b has value: 1.2

1.2.3.5.4 列表理解

In [20]:

  1. [i**2 for i in range(4)]

Out[20]:

  1. [0, 1, 4, 9]

练习

用Wallis公式,计算π的小数

Wallis公式