国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python 學(xué)習(xí)筆記-列表生成器

MyFaith / 3011人閱讀

摘要:定義列表生成器有兩種方式,一種是算式列表生成器我起的名字,一種通過關(guān)鍵詞。算式列表生成器算式列表生成器雨列表生成式類似,但需要換成。我們可以用一個包含關(guān)鍵字的函數(shù)來定義一個列表生成器。

通過列表生成式我們可以方便的生成列表。但是在有的時候,我們需要生成的列表非常長,而我們的計算機(jī)的內(nèi)存是有限的。在操作列表的時候,我們往往只是操作了列表的一部分區(qū)域的數(shù)據(jù)。

例如我們需要生成這么一個列表,列表中除了第1個和第2個數(shù)字外,其余數(shù)字都是前兩個數(shù)之和。

1,2,3,5,8,13...

如果這個數(shù)組只有幾千個或者幾萬個數(shù)字的時候,我們或許還能將它們都生成存在內(nèi)存中。但是我們?nèi)绻枰B續(xù)計算幾千萬個數(shù)字的時候,我再按上面的思路來就不大現(xiàn)實(shí)了。

認(rèn)真思考一下上面的數(shù)列,我們在遍歷的時候,其實(shí)只要知道前兩個數(shù)字的數(shù)值,我們就能源源不斷地計算出下一個數(shù)值是多少。

Python其實(shí)已經(jīng)給我們提供了現(xiàn)有的工具讓我們生成數(shù)列。與之前的生成式不同,生成器(Generators)在定義的時候并不是直接在內(nèi)存中生成數(shù)列,而是定義一個生成數(shù)列的算法。

定義列表生成器有兩種方式,一種是算式列表生成器(我起的名字),一種通過yield關(guān)鍵詞。

算式列表生成器

算式列表生成器雨列表生成式類似,但[]需要換成()

my_gernerator = (x*x for x in range(1,101))
generator object的迭代方式
1. next()函數(shù)

我們可以調(diào)用generator object的next()函數(shù)讓指針下移。例如

print my_generator.next() #輸出 1
print my_generator.next() #輸出 4
print my_generator.next() #輸出 9

每調(diào)用一次next(),計算出一個值,并記憶迭代到何處了。當(dāng)?shù)阶詈笠粋€元素后再調(diào)用next(),python則會拋出StopIteration錯誤。我們可以捕獲這個錯誤來處理迭代終止。
next()這種手動調(diào)用的運(yùn)用較少。

2. 用for循環(huán)

我們可以利用collections.Iterable來判斷generator object是否是一個Iterable對象。

from collections import Iterable
g = (x**3 for x in range(1,101))
print isinstance(g, Iterable) #輸出True

因此我們可以用for迭代generator object

for item in g:
    print item
包含yield的函數(shù)定義列表生成器

在定義一個比較復(fù)雜的列表生成器的時候,上述算式型的列表生成器已經(jīng)不能滿足我們的需求了。我們可以用一個包含yield關(guān)鍵字的函數(shù)來定義一個列表生成器。
例如我們來實(shí)現(xiàn)一下文章開頭生成一個“每個數(shù)字都是前兩個數(shù)字之和”的數(shù)列。

def fibonacci(max):
    n,a,b = 0,1,2
    while n Generator迭代到該處時,即產(chǎn)生一個數(shù)。并暫停在此處,等待下一次迭代,又從該處開始,又直到遇到下一個yield..不斷反復(fù),直到程序結(jié)束。
        a,b = b,a+b
        n = n+1

此時,fibonacci不再是一個普通函數(shù),而是一個generator object
我們通常用for循環(huán)來迭代generator對象。

for n in fibonacci(10):
    print n

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/44300.html

相關(guān)文章

  • python學(xué)習(xí)筆記列表生成

    摘要:在實(shí)際情況中,我們常常需要生成一些列表。先對進(jìn)行判斷,是偶數(shù)的則留下多重循環(huán)生存全排列列表比如我們需要生成全部乘法表,那么我們就可以使用兩重循環(huán)。 在實(shí)際情況中,我們常常需要生成一些列表。除了比較低效的用for循環(huán)來一個一個往列表中append外,還有什么比較好的方法呢?python給我們提供了非常強(qiáng)大的創(chuàng)建列表的方式。 例如我們需要創(chuàng)建1~100的一個數(shù)據(jù)列表。 range(1,...

    starsfun 評論0 收藏0
  • python學(xué)習(xí)筆記 序列

    內(nèi)置序列 容器序列 list, tuple, collections.deque等這些序列能存放不同類型的數(shù)據(jù) 扁平序列 str, byte, bytearray, memoryview, array.array, 這些序列只能容納一種類型數(shù)據(jù) 以上,容器序列存放的是他們所含任意類型對象的引用,而扁平序列存放的是值而不是引用 列表(list)是最基礎(chǔ)也是最重要的序列類型 列表推導(dǎo) >>> symb...

    godiscoder 評論0 收藏0
  • Python 3 學(xué)習(xí)筆記之——基礎(chǔ)語法

    摘要:迭代器和生成器字符串,列表或元組對象都可用于創(chuàng)建迭代器。創(chuàng)建自己的迭代器,需要在類中實(shí)現(xiàn)實(shí)現(xiàn)兩個方法與。方法返回一個特殊的迭代器對象,這個迭代器對象實(shí)現(xiàn)了方法并通過異常標(biāo)識迭代的完成。要反向遍歷一個序列,首先指定這個序列,然后調(diào)用函數(shù)。 1. a, b = a, a + b 先計算右邊表達(dá)式,然后再同時賦值給左邊。 2. 條件控制和循環(huán)語句 條件控制 if condition_1: ...

    scola666 評論0 收藏0
  • Python學(xué)習(xí)筆記

    摘要:數(shù)字和字符串,不能改變對象本身,只能改變引用的指向,稱為不可變數(shù)據(jù)對象。從開始,依次增加的值,直至等于或者大于將會輸出。該函數(shù)輸入姓名和各科的成績,輸出姓名和總共成績。表明該參數(shù)是關(guān)鍵字參數(shù),通常來講關(guān)鍵字參數(shù)是放在函數(shù)參數(shù)列表的最后。 基礎(chǔ) 局部變量與全局變量 函數(shù)中使用的變量是局部的 如果在外面的變量在函數(shù)中使用,需要加global關(guān)鍵字 APPLY = 100 # 全局變量 a ...

    anquan 評論0 收藏0

發(fā)表評論

0條評論

MyFaith

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<