内置函数range()常用于遍历数字序列,该函数可以生成算术级数: for i in range(5): ... print(i) ... 0 1 2 3 4 生成的序列不包含给定的终止数值;range(10)生成 10 个值,这是一个长度为 1
内置函数 range() 常用于遍历数字序列,该函数可以生成算术级数:
>>> for i in range(5):... print(i)
...
0
1
2
3
4
生成的序列不包含给定的终止数值;range(10) 生成 10 个值,这是一个长度为 10 的序列,其中的元素索引都是合法的。range 可以不从 0 开始,还可以按指定幅度递增(递增幅度称为 '步进',支持负数):
>>> list(range(5, 10))[5, 6, 7, 8, 9]
>>> list(range(0, 10, 3))
[0, 3, 6, 9]
>>> list(range(-10, -100, -30))
[-10, -40, -70]
range() 和 len() 组合在一起,可以按索引迭代序列:
>>> a = ['Mary', 'had', 'a', 'little', 'lamb']>>> for i in range(len(a)):
... print(i, a[i])
...
0 Mary
1 had
2 a
3 little
4 lamb
不过,大多数情况下,enumerate() 函数更便捷
如果只输出 range,会出现意想不到的结果:
>>> range(10)range(0, 10)
range() 返回对象的操作和列表很像,但其实这两种对象不是一回事。迭代时,该对象基于所需序列返回连续项,并没有生成真正的列表,从而节省了空间。这种对象称为可迭代对象 iterable,函数或程序结构可通过该对象获取连续项,直到所有元素全部迭代完毕。for 语句就是这样的架构,sum() 是一种把可迭代对象作为参数的函数:
>>> sum(range(4)) # 0 + 1 + 2 + 36
循环的技巧
在字典中循环时,用 items() 方法可同时取出键和对应的值:
>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}>>> for k, v in knights.items():
... print(k, v)
...
gallahad the pure
robin the brave
在序列中循环时,用 enumerate() 函数可以同时取出位置索引和对应的值:
>>> for i, v in enumerate(['tic', 'tac', 'toe']):... print(i, v)
...
0 tic
1 tac
2 toe
同时循环两个或多个序列时,用 zip() 函数可以将其内的元素一一匹配:
>>> questions = ['name', 'quest', 'favorite color']>>> answers = ['lancelot', 'the holy grail', 'blue']
>>> for q, a in zip(questions, answers):
... print('What is your {0}? It is {1}.'.format(q, a))
...
What is your name? It is lancelot.
What is your quest? It is the holy grail.
What is your favorite color? It is blue.
逆向循环序列时,先正向定位序列,然后调用 reversed() 函数:
>>> for i in reversed(range(1, 10, 2)):... print(i)
...
9
7
5
3
1
按指定顺序循环序列,可以用 sorted() 函数,在不改动原序列的基础上,返回一个重新的序列:
>>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']>>> for i in sorted(basket):
... print(i)
...
apple
apple
banana
orange
orange
pear
使用 set() 去除序列中的重复元素。使用 sorted() 加 set() 则按排序后的顺序,循环遍历序列中的唯一元素:
>>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']>>> for f in sorted(set(basket)):
... print(f)
...
apple
banana
orange
pear
一般来说,在循环中修改列表的内容时,创建新列表比较简单,且安全:
>>> import math>>> raw_data = [56.2, float('NaN'), 51.7, 55.3, 52.5, float('NaN'), 47.8]
>>> filtered_data = []
>>> for value in raw_data:
... if not math.isnan(value):
... filtered_data.append(value)
...
>>> filtered_data
[56.2, 51.7, 55.3, 52.5, 47.8] 【文章原创作者:美国站群多ip服务器 http://www.558idc.com/mgzq.html