最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

跟老齊學(xué)Python之for循環(huán)語句

 更新時(shí)間:2014年10月02日 15:46:45   投稿:hebedich  
看這個(gè)標(biāo)題,有點(diǎn)匪夷所思嗎?為什么for是難以想象的呢?因?yàn)樵趐ython中,它的確是很常用而且很強(qiáng)悍,強(qiáng)悍到以至于另外一個(gè)被稱之為迭代的東西,在python中就有點(diǎn)相形見絀了。在別的語言中,for的地位從來沒有如同python中這么高的。

廢話少說,上干活。

for的基本操作

for是用來循環(huán)的,是從某個(gè)對(duì)象那里依次將元素讀取出來??聪旅娴睦?,將已經(jīng)學(xué)習(xí)過的數(shù)據(jù)對(duì)象用for循環(huán)一下,看看哪些能夠使用,哪些不能使用。同時(shí)也是復(fù)習(xí)一下過往的內(nèi)容。

復(fù)制代碼 代碼如下:

>>> name_str = "qiwsir"
>>> for i in name_str:  #可以對(duì)str使用for循環(huán)
...     print i,
...                    
q i w s i r

>>> name_list = list(name_str)
>>> name_list
['q', 'i', 'w', 's', 'i', 'r']
>>> for i in name_list:     #對(duì)list也能用
...     print i,
...
q i w s i r

>>> name_set = set(name_str)    #set還可以用
>>> name_set
set(['q', 'i', 's', 'r', 'w'])
>>> for i in name_set:
...     print i,
...
q i s r w

>>> name_tuple = tuple(name_str)
>>> name_tuple
('q', 'i', 'w', 's', 'i', 'r')
>>> for i in name_tuple:        #tuple也能呀
...     print i,
...
q i w s i r

>>> name_dict={"name":"qiwsir","lang":"python","website":"qiwsir.github.io"}
>>> for i in name_dict:             #dict也不例外
...     print i,"-->",name_dict[i]
...
lang --> python
website --> qiwsir.github.io
name --> qiwsir

除了上面的數(shù)據(jù)類型之外,對(duì)文件也能夠用for,這在前面有專門的《不要紅頭文件》兩篇文章講解有關(guān)如何用for來讀取文件對(duì)象的內(nèi)容。看官若忘記了,可去瀏覽。

for在list解析中,用途也不可小覷,這在講解list解析的時(shí)候,業(yè)已說明,不過,還是再復(fù)習(xí)一下為好,所謂學(xué)而時(shí)常復(fù)習(xí)之,不亦哈哈乎。

復(fù)制代碼 代碼如下:

>>> one = range(1,9)        
>>> one
[1, 2, 3, 4, 5, 6, 7, 8]
>>> [ x for x in one if x%2==0 ]
[2, 4, 6, 8]

什么也不說了,list解析的強(qiáng)悍,在以后的學(xué)習(xí)中會(huì)越來越體會(huì)到的,佩服佩服呀。

列位如果用python3,會(huì)發(fā)現(xiàn)字典解析、元組解析也是奇妙的呀。

要上升一個(gè)檔次,就得進(jìn)行概括。將上面所說的for循環(huán),概括一下,就是下圖所示:

請(qǐng)輸入圖片描述

用一個(gè)文字表述:

復(fù)制代碼 代碼如下:

for iterating_var in sequence:
    statements

iterating_var是對(duì)象sequence的迭代變量,也就是sequence必須是一個(gè)能夠有某種序列的對(duì)象,特別注意沒某種序列,就是說能夠按照一定的腳標(biāo)獲取元素。當(dāng)然,文件對(duì)象屬于序列,我們沒有用腳標(biāo)去獲取每行,如果把它讀取出來,因?yàn)橐彩且粋€(gè)str,所以依然可以用腳標(biāo)讀取其內(nèi)容。

zip

zip是什么東西?在交互模式下用help(zip),得到官方文檔是:

zip(...)
zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]
Return a list of tuples, where each tuple contains the i-th element from each of the argument sequences. The returned list is truncated in length to the length of the shortest argument sequence.
通過實(shí)驗(yàn)來理解上面的文檔:

復(fù)制代碼 代碼如下:

>>> a = "qiwsir"
>>> b = "github"
>>> zip(a,b)
[('q', 'g'), ('i', 'i'), ('w', 't'), ('s', 'h'), ('i', 'u'), ('r', 'b')]
>>> c = [1,2,3]
>>> d = [9,8,7,6]
>>> zip(c,d)
[(1, 9), (2, 8), (3, 7)]
>>> e = (1,2,3)
>>> f = (9,8)
>>> zip(e,f)
[(1, 9), (2, 8)]

>>> m = {"name","lang"} 
>>> n = {"qiwsir","python"}
>>> zip(m,n)
[('lang', 'python'), ('name', 'qiwsir')]
>>> s = {"name":"qiwsir"}
>>> t = {"lang":"python"}
>>> zip(s,t)
[('name', 'lang')]

zip是一個(gè)內(nèi)置函數(shù),它的參數(shù)必須是某種序列數(shù)據(jù)類型,如果是字典,那么鍵視為序列。然后將序列對(duì)應(yīng)的元素依次組成元組,做為一個(gè)list的元素。

下面是比較特殊的情況,參數(shù)是一個(gè)序列數(shù)據(jù)的時(shí)候,生成的結(jié)果樣子:

復(fù)制代碼 代碼如下:

>>> a 
'qiwsir'
>>> c 
[1, 2, 3]
>>> zip(c)
[(1,), (2,), (3,)]
>>> zip(a)
[('q',), ('i',), ('w',), ('s',), ('i',), ('r',)]

這個(gè)函數(shù)和for連用,就是實(shí)現(xiàn)了:

復(fù)制代碼 代碼如下:

>>> c
[1, 2, 3]
>>> d
[9, 8, 7, 6]
>>> for x,y in zip(c,d):    #實(shí)現(xiàn)一對(duì)一對(duì)地打印
...     print x,y
...
1 9
2 8
3 7
>>> for x,y in zip(c,d):    #把兩個(gè)list中的對(duì)應(yīng)量上下相加。
...     print x+y
...
10
10
10

上面這個(gè)相加的功能,如果不用zip,還可以這么寫:

復(fù)制代碼 代碼如下:

>>> length = len(c) if len(c)<len(d) else len(d)    #判斷c,d的長(zhǎng)度,將短的長(zhǎng)度拿出來
>>> for i in range(length):
...     print c[i]+d[i]
...
10
10
10

以上兩種寫法那個(gè)更好呢?前者?后者?哈哈。我看差不多了。還可以這么做呢:

復(fù)制代碼 代碼如下:

>>> [ x+y for x,y in zip(c,d) ]
[10, 10, 10]

前面多次說了,list解析強(qiáng)悍呀。當(dāng)然,還可以這樣的:

復(fù)制代碼 代碼如下:

>>> [ c[i]+d[i] for i in range(length) ]
[10, 10, 10]

for循環(huán)語句在后面還會(huì)經(jīng)常用到,其實(shí)前面已經(jīng)用了很多了。所以,看官應(yīng)該不感到太陌生。

相關(guān)文章

最新評(píng)論

西和县| 安远县| 赤城县| 澄迈县| 宁夏| 称多县| 香港 | 乌兰察布市| 二连浩特市| 定襄县| 象山县| 柘荣县| 乌拉特前旗| 天长市| 大化| 简阳市| 濮阳市| 伊金霍洛旗| 西城区| 通州区| 讷河市| 搜索| 剑河县| 仪征市| 德庆县| 盐山县| 上蔡县| 尖扎县| 石景山区| 剑川县| 钟山县| 宜宾县| 舟曲县| 西丰县| 依安县| 金坛市| 宝应县| 白水县| 康乐县| 康定县| 九江市|