python3中的range()函式
阿新 • • 發佈:2018-11-09
先介紹一下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]