python3中的range()函数

先介绍一下range()函数的用法:

>>> range(1,5) #代表从1到5(不包含5)
[1, 2, 3, 4]
>>> range(1,5,2) #代表从1到5,间隔2(不包含5)
[1, 3]
>>> range(5) #代表从0到5(不包含5)
[0, 1, 2, 3, 4]

在python3中,直接打印range()函数,如下:

print (range(1,100));
>>> range(1, 100)

而不是我们期望的输出 [1, 2, 3, 4, 5, 6, 7, 8,......98, 99]

这是由于版本的问题,在python2中是可以输出我们期望的结果。

根据官方的说明是:

在很多种情况下,range()函数返回的对象的行为都很像一个列表,但是它确实不是一个列表,它只是在迭代的情况下返回指定索引的值,但是它并不会在内存中真正产生一个列表对象,这样也是为了节约内存空间。

我们称这种对象是可迭代的,或者是可迭代对象,还有一种对象叫迭代器,它们需要从一个可迭代对象中连续获取指定索引的值,一直到索引结束。list()函数就是这样一个迭代器,它可以把range()函数返回的对象变成一个列表。

总结:

range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表。

list() 函数是对象迭代器,把对象转为一个列表。返回的变量类型为列表。

所以我们可以将range()函数放入list()函数对象迭代器里面,就可以返回我们期望的结果。

print (list(range(1,10)));
>>> [1, 2, 3, 4, 5, 6, 7, 8, 9]

类似的函数还有:filter()

'''
请利用filter()过滤出1~100中平方根是整数的数,即结果应该是:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
'''
import math
def is_sqr(x):
    return math.sqrt(x) % 1 == 0

print ( list(filter(is_sqr, list(range(1,101)))) );

>>> [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

猜你喜欢

转载自blog.csdn.net/qq_37811638/article/details/83026829