成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

MyFaith / 3020人閱讀

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

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

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

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

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

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

Python其實(shí)已經(jīng)給我們提供了現(xiàn)有的工具讓我們生成數(shù)列。與之前的生成式不同,生成器(Generators)在定義的時(shí)候并不是直接在內(nèi)存中生成數(shù)列,而是定義一個(gè)生成數(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(),計(jì)算出一個(gè)值,并記憶迭代到何處了。當(dāng)?shù)阶詈笠粋€(gè)元素后再調(diào)用next(),python則會拋出StopIteration錯(cuò)誤。我們可以捕獲這個(gè)錯(cuò)誤來處理迭代終止。
next()這種手動調(diào)用的運(yùn)用較少。

2. 用for循環(huán)

我們可以利用collections.Iterable來判斷generator object是否是一個(gè)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ù)定義列表生成器

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

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

此時(shí),fibonacci不再是一個(gè)普通函數(shù),而是一個(gè)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://systransis.cn/yun/44300.html

相關(guān)文章

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

    摘要:在實(shí)際情況中,我們常常需要生成一些列表。先對進(jìn)行判斷,是偶數(shù)的則留下多重循環(huán)生存全排列列表比如我們需要生成全部乘法表,那么我們就可以使用兩重循環(huán)。 在實(shí)際情況中,我們常常需要生成一些列表。除了比較低效的用for循環(huán)來一個(gè)一個(gè)往列表中append外,還有什么比較好的方法呢?python給我們提供了非常強(qiáng)大的創(chuàng)建列表的方式。 例如我們需要?jiǎng)?chuàng)建1~100的一個(gè)數(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)兩個(gè)方法與。方法返回一個(gè)特殊的迭代器對象,這個(gè)迭代器對象實(shí)現(xiàn)了方法并通過異常標(biāo)識迭代的完成。要反向遍歷一個(gè)序列,首先指定這個(gè)序列,然后調(diào)用函數(shù)。 1. a, b = a, a + b 先計(jì)算右邊表達(dá)式,然后再同時(shí)賦值給左邊。 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元查看
<