>"I give you a new commandment, that you love one another. Just as I have loved you, you also should love one another. By this everyone will know that you are my disciples, if you have love for one another." (JOHN 14:34-35)
#è¯å¥(4)
for循ç¯å¨pythonä¸åºç¨å¹¿æ³ï¼æä»¥ï¼è¦ç¨æ´å¤çç¯å¹
æ¥ä»ç»ã
##å¹¶è¡è¿ä»£
å
³äºè¿ä»£ï¼å¨[ãå表(2)ã](./112.md)䏿¾ç»æå°è¿âå¯è¿ä»£ç(iterable)âè¿ä¸ªè¯ï¼å¹¶ç»äºäºéå½è§£éï¼è¿é忬¡æå°âè¿ä»£âï¼è¯´æå®å¨pythonä¸å æéè¦çä½ç½®ã
è¿ä»£ï¼å¨pythonä¸è¡¨ç°å°±æ¯ç¨for循ç¯ï¼ä»åºå对象ä¸è·å¾ä¸å®æ°éçå
ç´ ã
å¨åé¢ä¸èä¸ï¼ç¨forå¾ªç¯æ¥è·å¾å表ãå符串ãå
ç»ï¼ä¹è³äºåå
¸çé®å¼å¯¹ï¼é½æ¯è¿ä»£ã
ç°å®ä¸è¿ä»£ä¸é½æ¯é£ä¹ç®åçï¼æ¯å¦è¿ä¸ªé®é¢ï¼
**é®é¢ï¼**æä¸¤ä¸ªå表ï¼å嫿¯ï¼a = [1,2,3,4,5], b = [9,8,7,6,5]ï¼è¦è®¡ç®è¿ä¸¤ä¸ªå表ä¸å¯¹åºå
ç´ çåã
**è§£æï¼**
太ç®åäºï¼ä¸çå°±ç¥éç»æäºã
å¾å¥½ï¼è¿æ¯ä½ çæ¹æ³ï¼å¦ææ¯computerå§å¨æ¥åï¼åºè¯¥æä¹åå¢ï¼
è§å¯åç°ä¸¤ä¸ªå表çé¿åº¦ä¸æ ·ï¼é½æ¯5ãé£ä¹å¯¹åºå
ç´ æ±åï¼å°±æ¯ç¸åçç´¢å¼å¼å¯¹åºçå
ç´ æ±åï¼å³a[i]+b[i],(i=0,1,2,3,4)ï¼è¿æ ·ä¸ä¸ªä¸ä¸ªå°å°±æç¸åºå
ç´ åæ±åºæ¥äºãå½ç¶ï¼è¦ç¨foræ¥åè¿ä¸ªäºæ
äºã
>>> a = [1,2,3,4,5]
>>> b = [9,8,7,6,5]
>>> c = []
>>> for i in range(len(a)):
... c.append(a[i]+b[i])
...
>>> c
[10, 10, 10, 10, 10]
çæ¥forç表ç°è¿ä¸éãä¸è¿ï¼è¿ç§æ¹æ³è½ç¶è§£å³é®é¢äºï¼ä½pythonæ»ä¸ä¼å±éäºä¸ä¸ªè§£å³ä¹éãäºæ¯åæä¸ä¸ªå
å»ºå½æ°`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.
seq1, seq2åå«ä»£è¡¨äºåºåç±»åçæ°æ®ãéè¿å®éªæ¥çè§£ä¸é¢çææ¡£ï¼
>>> a = "qiwsir"
>>> b = "github"
>>> zip(a,b)
[('q', 'g'), ('i', 'i'), ('w', 't'), ('s', 'h'), ('i', 'u'), ('r', 'b')]
妿åºåé¿åº¦ä¸åï¼é£ä¹å°±ä»¥"the length of the shortest argument sequence"为åã
>>> c = [1,2,3]
>>> d = [9,8,7,6]
>>> zip(c,d)
[(1, 9), (2, 8), (3, 7)]
>>> m = {"name","lang"}
>>> n = {"qiwsir","python"}
>>> zip(m,n)
[('lang', 'python'), ('name', 'qiwsir')]
mï¼næ¯åå
¸åï¼å½ç¶ä¸æ¯ãä¸é¢çææ¯åå
¸å¢ã
>>> s = {"name":"qiwsir"}
>>> t = {"lang":"python"}
>>> zip(s,t)
[('name', 'lang')]
zipæ¯ä¸ä¸ªå
ç½®å½æ°ï¼å®çåæ°å¿
é¡»æ¯æç§åºåæ°æ®ç±»åï¼å¦ææ¯åå
¸ï¼é£ä¹é®è§ä¸ºåºåãç¶åå°åºå对åºçå
ç´ ä¾æ¬¡ç»æå
ç»ï¼å为ä¸ä¸ªlistçå
ç´ ã
ä¸é¢æ¯æ¯è¾ç¹æ®çæ
åµï¼åæ°æ¯ä¸ä¸ªåºåæ°æ®çæ¶åï¼çæçç»ææ ·åï¼
>>> a
'qiwsir'
>>> c
[1, 2, 3]
>>> zip(c)
[(1,), (2,), (3,)]
>>> zip(a)
[('q',), ('i',), ('w',), ('s',), ('i',), ('r',)]
å¾å¥½ç`zip()`ï¼é£ä¹å°±ç¨å®æ¥è§£å³åé¢é£ä¸ªä¸¤ä¸ªå表ä¸å¼å¯¹åºç¸å å§ã
>>> d = []
>>> for x,y in zip(a,b):
... d.append(x+y)
...
>>> d
[10, 10, 10, 10, 10]
å¤ä¹ä¼é
çè§£å³ï¼
æ¯è¾è¿ä¸ªé®é¢ç两ç§è§£æ³ï¼ä¼¼ä¹ç¬¬ä¸ç§è§£æ³éç¨é¢è¾çªï¼æ¯å¦ï¼å¦æå·²ç¥ç»å®ç两个å表é¿åº¦ä¸åï¼ç¬¬ä¸ç§è§£æ³å°±åºé®é¢äºãè第äºç§è§£æ³è¿å¯ä»¥ç»§ç»éç¨ãçç¡®å¦æ¤ï¼ä¸è¿ï¼ç¬¬ä¸ç§è§£æ³ä¹ä¸æ¯ä¸è½ä¿®è®¢çã
>>> a = [1,2,3,4,5]
>>> b = ["python","www.itdiffer.com","qiwsir"]
å¦æå·²ç¥æ¯è¿æ ·ä¸¤ä¸ªå表ï¼è¦è®²å¯¹åºçå
ç´ âå èµ·æ¥âã
>>> length = len(a) if len(a)>> length
3
é¦å
ç¨è¿ç§æ¹æ³è·å¾ä¸¤ä¸ªåè¡¨ä¸æççé£ä¸ªå表çé¿åº¦ãçé£å¥ä¸å
æä½ï¼è¿æ¯é常pythonicçåæ³å¦ãååºè¿å¥ï¼å°±å¯ä»¥åå
髿äºãååã
>>> for i in range(length):
... c.append(str(a[i]) + ":" + b[i])
...
>>> c
['1:python', '2:www.itdiffer.com', '3:qiwsir']
æè¿æ¯ç¨ç¬¬ä¸ä¸ªæè·¯åçï¼ç»è¿è¿ä¹ä¿®æ£ä¸ä¸ï¼ä¹è¿è½ç¨ãè¦æ³¨æä¸ä¸ªç»èï¼å¨âå âçæ¶åï¼ä¸è½ç´æ¥ç¨`a[i]`ï¼å 为å®å¼ç¨ç对象æ¯ä¸ä¸ªintç±»åï¼ä¸è½è·åé¢çstrç±»åç¸å ï¼å¿
须转åä¸ä¸ã
å½ç¶ï¼`zip()`乿¯è½è§£å³è¿ä¸ªé®é¢çã
>>> d = []
>>> for x,y in zip(a,b):
... d.append(x + y)
...
Traceback (most recent call last):
File "", line 2, in
TypeError: unsupported operand type(s) for +: 'int' and 'str'
æ¥éï¼çé误信æ¯ï¼æååæéçé£ä¸ªé®é¢å°±ååºæ¥äºãæä»¥ï¼åºè¯¥è¿ä¹åï¼
>>> for x,y in zip(a,b):
... d.append(str(x) + ":" + y)
...
>>> d
['1:python', '2:www.itdiffer.com', '3:qiwsir']
è¿æå¾å°äºæ£ç¡®ç»æã
åè®°ï¼**computeræ¯ä¸ä¸ªå§å¨ï¼å¥¹éå¸¸ç§æ°ï¼éè¦æ²ä»£ç çå°ä¼å们èå¿å°ãç»å¿å°è·å¥¹ç¸å¤ã**
以ä¸ä¸¤ç§åæ³é£ä¸ªæ´å¥½å¢ï¼åè
ï¼åè
ï¼ååãæçå·®ä¸å¤äºã
>>> result
[(2, 11), (4, 13), (6, 15), (8, 17)]
>>> zip(*result)
[(2, 4, 6, 8), (11, 13, 15, 17)]
`zip()`è¿è½è¿ä¹å¹²ï¼æ¯ä¸æ¯æç¹ææï¼
ä¸é¢å»¶ä¼¸ä¸ä¸ªé®é¢ï¼
**é®é¢**ï¼æä¸ä¸ªdictionaryï¼myinfor = {"name":"qiwsir","site":"qiwsir.github.io","lang":"python"},å°è¿ä¸ªåå
¸åæ¢æï¼infor = {"qiwsir":"name","qiwsir.github.io":"site","python":"lang"}
**è§£æï¼**
è§£æ³æå 个ï¼å¦æç¨for循ç¯ï¼å¯ä»¥è¿æ ·åï¼å½ç¶ï¼çå®å¦æææ¹æ³ï¼æ¬¢è¿è´´åºæ¥ï¼ã
>>> infor = {}
>>> for k,v in myinfor.items():
... infor[v]=k
...
>>> infor
{'python': 'lang', 'qiwsir.github.io': 'site', 'qiwsir': 'name'}
ä¸é¢ç¨zip()æ¥è¯è¯ï¼
>>> dict(zip(myinfor.values(),myinfor.keys()))
{'python': 'lang', 'qiwsir.github.io': 'site', 'qiwsir': 'name'}
åå¼ï¼è¿æ¯ä»ä¹æ
åµï¼åæ¥è¿ä¸ªzip()è¿è½è¿æ ·ç¨ãæ¯çï¼æ¬è´¨ä¸æ¯è¿ä¹åäºæ
ã妿å°ä¸é¢è¿ä¸è¡åè§£å¼æ¥ï¼çå®å°±æç½å
¶ä¸ç奥å¦äºã
>>> myinfor.values() #å¾å°ä¸¤ä¸ªlist
['python', 'qiwsir', 'qiwsir.github.io']
>>> myinfor.keys()
['lang', 'name', 'site']
>>> temp = zip(myinfor.values(),myinfor.keys()) #å缩æä¸ä¸ªlistï¼æ¯ä¸ªå
ç´ æ¯ä¸ä¸ªtuple
>>> temp
[('python', 'lang'), ('qiwsir', 'name'), ('qiwsir.github.io', 'site')]
>>> dict(temp) #è¿æ¯å½æ°dict()çåè½ï¼å°ä¸è¿°å表转å为dictionary
{'python': 'lang', 'qiwsir.github.io': 'site', 'qiwsir': 'name'}
è³æ¤ï¼æ¯ä¸æ¯æç½zip()å循ç¯çå
³ç³»äºå¢ï¼æäºå®å¯ä»¥è®©æäºå¾ªç¯ç®åã
##enumerate
è¿æ¯ä¸ä¸ªæææçå
ç½®å½æ°ï¼æ¬æ¥æä»¬å¯ä»¥éè¿`for i in range(len(list))`çæ¹å¼å¾å°ä¸ä¸ªlistçæ¯ä¸ªå
ç´ ç´¢å¼ï¼ç¶åå¨ç¨list[i]çæ¹å¼å¾å°è¯¥å
ç´ ã妿è¦åæ¶å¾å°å
ç´ ç´¢å¼åå
ç´ æä¹åï¼å°±æ¯è¿æ ·äº:
>>> for i in range(len(week)):
... print week[i]+' is '+str(i) #注æï¼iæ¯intç±»åï¼å¦æååé¢çç¨+è¿æ¥ï¼å¿
é¡»æ¯strç±»å
...
monday is 0
sunday is 1
friday is 2
python䏿ä¾äºä¸ä¸ªå
ç½®å½æ°enumerateï¼è½å¤å®ç°ç±»ä¼¼çåè½
>>> for (i,day) in enumerate(week):
... print day+' is '+str(i)
...
monday is 0
sunday is 1
friday is 2
宿¹ææ¡£æ¯è¿ä¹è¯´çï¼
>Return an enumerate object. sequence must be a sequence, an iterator, or some other object which supports iteration. The next() method of the iterator returned by enumerate() returns a tuple containing a count (from start which defaults to 0) and the values obtained from iterating over sequence:
顺便æå½å 个ä¾åï¼ä¾ç宿¬£èµï¼æå¥½å®éªä¸ä¸ã
>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
对äºè¿æ ·ä¸ä¸ªå表ï¼
>>> mylist = ["qiwsir",703,"python"]
>>> enumerate(mylist)
åºç°è¿ä¸ªç»æï¼ç¨listå°±è½å®ç°è½¬æ¢ï¼æ¾ç¤ºå
容.æå³çå¯è¿ä»£ã
>>> list(enumerate(mylist))
[(0, 'qiwsir'), (1, 703), (2, 'python')]
å设计ä¸ä¸ªå°é®é¢ï¼ç»ä¹ ä¸ä¸è¿ä¸ªå½æ°ã
**é®é¢ï¼**å°å符串ä¸çæäºåç¬¦æ¿æ¢ä¸ºå
¶å®çå符串ãåå§å符串"Do you love Canglaoshi? Canglaoshi is a good teacher."ï¼è¯·å°"Canglaoshi"æ¿æ¢ä¸º"PHP".
**è§£æï¼**
>>> raw = "Do you love Canglaoshi? Canglaoshi is a good teacher."
è¿æ¯æè¦æ±çé£ä¸ªå符串ï¼å½æ¶ï¼ä¸è½ç´æ¥å¯¹è¿ä¸ªå符串使ç¨`enumerate()`ï¼å 为å®ä¼åæè¿æ ·ï¼
>>> list(enumerate(raw))
[(0, 'D'), (1, 'o'), (2, ' '), (3, 'y'), (4, 'o'), (5, 'u'), (6, ' '), (7, 'l'), (8, 'o'), (9, 'v'), (10, 'e'), (11, ' '), (12, 'C'), (13, 'a'), (14, 'n'), (15, 'g'), (16, 'l'), (17, 'a'), (18, 'o'), (19, 's'), (20, 'h'), (21, 'i'), (22, '?'), (23, ' '), (24, 'C'), (25, 'a'), (26, 'n'), (27, 'g'), (28, 'l'), (29, 'a'), (30, 'o'), (31, 's'), (32, 'h'), (33, 'i'), (34, ' '), (35, 'i'), (36, 's'), (37, ' '), (38, 'a'), (39, ' '), (40, 'g'), (41, 'o'), (42, 'o'), (43, 'd'), (44, ' '), (45, 't'), (46, 'e'), (47, 'a'), (48, 'c'), (49, 'h'), (50, 'e'), (51, 'r'), (52, '.')]
è¿ä¸æ¯æéè¦çãæä»¥ï¼å
æraw转å为å表ï¼
>>> raw_lst = raw.split(" ")
ç¶åç¨`enumerate()`
>>> for i, string in enumerate(raw_lst):
... if string == "Canglaoshi":
... raw_lst[i] = "PHP"
...
没æä»ä¹å¼å¸¸ç°è±¡ï¼æ¥çä¸ä¸é£ä¸ªraw_lstå表ï¼ççæ¯ä¸æ¯æ"Canglaoshi"æ¿æ¢ä¸º"PHP"äºã
>>> raw_lst
['Do', 'you', 'love', 'Canglaoshi?', 'PHP', 'is', 'a', 'good', 'teacher.']
åªæ¿æ¢äºä¸ä¸ªï¼è¿æä¸ä¸ªæ²¡ææ¿æ¢ã为ä»ä¹ï¼ä»ç»è§å¯åç°ï¼æ²¡ææ¿æ¢çé£ä¸ªæ¯'Canglaoshi?',è·æ¡ä»¶å¤æä¸ç"Canglaoshi"ä¸ä¸æ ·ã
ä¿®æ¹ä¸ä¸ï¼ææ¡ä»¶æ¾å®½ï¼
>>> for i, string in enumerate(raw_lst):
... if "Canglaoshi" in string:
... raw_lst[i] = "PHP"
...
>>> raw_lst
['Do', 'you', 'love', 'PHP', 'PHP', 'is', 'a', 'good', 'teacher.']
好çãç¶åå¢ï¼å转å为å符串ï¼çç»è¯»è
è¯è¯ã
##listè§£æ
å
çä¸é¢çä¾åï¼è¿ä¸ªä¾åæ¯æ³å¾å°1å°9çæ¯ä¸ªæ´æ°çå¹³æ¹ï¼å¹¶ä¸å°ç»ææ¾å¨list䏿å°åºæ¥
>>> power2 = []
>>> for i in range(1,10):
... power2.append(i*i)
...
>>> power2
[1, 4, 9, 16, 25, 36, 49, 64, 81]
pythonæä¸ä¸ªéå¸¸æææçåè½ï¼å°±æ¯listè§£æï¼å°±æ¯è¿æ ·çï¼
>>> squares = [x**2 for x in range(1,10)]
>>> squares
[1, 4, 9, 16, 25, 36, 49, 64, 81]
çå°è¿ä¸ªç»æï¼çå®è¿ä¸æå¹åï¼è¿å°±æ¯pythonï¼è¿½æ±ç®æ´ä¼é
çpythonï¼
å
¶å®æ¹ææ¡£ä¸æè¿æ ·ä¸æ®µæè¿°ï¼éåºäºlistè§£æççè°ï¼
>List comprehensions provide a concise way to create lists. Common applications are to make new lists where each element is the result of some operations applied to each member of another sequence or iterable, or to create a subsequence of those elements that satisfy a certain condition.
è¿å°±æ¯pythonæææçå°æ¹ï¼ä¹æ¯è®¡ç®æºé«çº§è¯è¨ç¼ç¨æææçå°æ¹ï¼ä½ åªè¦å¨èçï¼æ»è½æ¾å°æåçä¸è¥¿ã
å
¶å®ï¼ä¸ä»
ä»
对æ°åç»æçlistï¼ææçé½å¯ä»¥å¦æ¤æä½ã请å¨å¹³å¤äºæ¿å¨çå¿ä¹åï¼é»é»å°çä¸é¢ç代ç ï¼ææä¸ä¸listè§£æçé
åã
>>> mybag = [' glass',' apple','green leaf '] #æçåé¢æç©ºæ ¼ï¼æçåé¢æç©ºæ ¼
>>> [one.strip() for one in mybag] #廿å
ç´ ååçç©ºæ ¼
['glass', 'apple', 'green leaf']
ä¸é¢çé®é¢ï¼é½è½ç¨listè§£ææ¥éåã读è
ä¸å¦¨è¯è¯ã
å¨å¾å¤æ
åµä¸ï¼listè§£æçæ§è¡æçé«ï¼ä»£ç ç®æ´æäºãæ¯å®é
åç¨åºä¸ç»å¸¸è¢«ç¨å°çã
------
[æ»ç®å½](./index.md) | [ä¸èï¼è¯å¥(3)](./123.md) | [ä¸èï¼è¯å¥(5)](./125.md)
å¦æä½ è®¤ä¸ºæå¿
è¦æèµæï¼è¯·éè¿æ¯ä»å®ï¼**[email protected]**,ä¸èææ¿ã