4.2. for 语句

Python 中的 for 语句与你在 C 或 Pascal 中可能用到的有所不同。 Python 中的 for 语句并不总是对算术递增的数值进行迭代(如同 Pascal),或是给予用户定义迭代步骤和暂停条件的能力(如同 C),而是对任意序列进行迭代(例如列表或字符串),条目的迭代顺序与它们在序列中出现的顺序一致。 例如(此处英文为双关语):

  1. >>> # Measure some strings:
  2. ... words = ['cat', 'window', 'defenestrate']
  3. >>> for w in words:
  4. ... print(w, len(w))
  5. ...
  6. cat 3
  7. window 6
  8. defenestrate 12

在遍历同一个集合时修改该集合的代码可能很难获得正确的结果。通常,更直接的做法是循环遍历该集合的副本或创建新集合:

  1. # Strategy: Iterate over a copy
  2. for user, status in users.copy().items():
  3. if status == 'inactive':
  4. del users[user]
  5.  
  6. # Strategy: Create a new collection
  7. active_users = {}
  8. for user, status in users.items():
  9. if status == 'active':
  10. active_users[user] = status