当前位置 : 主页 > 编程语言 > python >

#yyds干货盘点#range() 函数

来源:互联网 收集:自由互联 发布时间:2022-06-18
内置函数​​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 + 3
6

循环的技巧

在字典中循环时,用 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
上一篇:Python 金融量化 随机指标交易策略
下一篇:没有了
网友评论