1 Python 提供了两种不同的方法来调用 range() . 完整语法要求提供两个或三个整数参数: 2 range(start, end, step =1) 3 range() 会返回一个包含所有 k 的列表, 这里 start <= k < end , 从 start 到 end , k 每 4 次 5 递增 step . step 不可以为零,否则将发生错误. 6 >>> range(2, 19, 3) 7 [2, 5, 8, 11, 14, 17] 8 如果只给定两个参数,而省略 step, step 就使用默认值 1 . 9 >>> range(3, 7) 10 [3, 4, 5, 6]
1 xrange() 类似 range() , 不过当你有一个很大的范围列表时, xrange() 可能更为适合, 因为 2 它不会在内存里创建列表的完整拷贝. 它只被用在 for 循环中, 在 for 循环外使用它没有意义。 3 同样地, 你可以想到, 它的性能远高出 range(), 因为它不生成整个列表。在 Python 的将来版本 4 中, range() 可能会像 xrange() 一样, 返回一个可迭代对象(不是列表也不是一个迭代器)
1 记住,在迭代可变对象的时候修改它们并不是个好主意. 这在迭代器出现之前就是一个问题. 2 一个流行的例子就是循环列表的时候删除满足(或不满足)特定条件的项: 3 for eachURL in allURLs: 4 if not eachURL.startswith(‘http://‘): 5 allURLs.remove(eachURL) # YIKES!! 6 除列表外的其他序列都是不可变的, 所以危险就发生在这里. 一个序列的迭代器只是记录你 7 当前到达第多少个元素, 所以如果你在迭代时改变了元素, 更新会立即反映到你所迭代的条目上. 8 在迭代字典的 key 时, 你绝对不能改变这个字典. 使用字典的 keys() 方法是可以的, 因为 9 keys() 返回一个独立于字典的列表. 而迭代器是与实际对象绑定在一起的, 它将不会继续执行下 10 去: 11 >>> myDict = {‘a‘: 1, ‘b‘: 2, ‘c‘: 3, ‘d‘: 4} 12 >>> for eachKey in myDict: 13 ... print eachKey, myDict[eachKey] 14 ... del myDict[eachKey] 15 ... a 1 16 Traceback (most recent call last): 17 File "", line 1, in ? 18 RuntimeError: dictionary changed size during iteration
1 列表解析: 2 [expr for iter_var in iterable if cond_expr] 3 生成器表达式: 4 (expr for iter_var in iterable if cond_expr)
原文:http://www.cnblogs.com/jakeyChen/p/4874592.html