從一個例子看Python3.x中序列解包
阿新 • • 發佈:2019-01-30
假如一個字串'ABCDEFGH',要輸出下列格式:
即: 每次取出第一個作為首,然後的字串拆成列表,放置在後面,最後成上面的輸出:
一般的處理是:
備註:>>> s = 'ABCDEFGH' >>> while s: front, s = s[0], list(s[1:]) print(front, s) A ['B', 'C', 'D', 'E', 'F', 'G', 'H'] B ['C', 'D', 'E', 'F', 'G', 'H'] C ['D', 'E', 'F', 'G', 'H'] D ['E', 'F', 'G', 'H'] E ['F', 'G', 'H'] F ['G', 'H'] G ['H'] H []
1.將切片中索引為0的字元賦值給front
2.將切片中索引為1之後字元再賦值給s
3.用list函式將字串轉變為列表
4.用while迴圈來s來判斷,為空,則退出迴圈
上面的處理,可以用序列解包的方法會來處理,並好理解。 序列解包是Python 3.0之後出現,之前的版本一般賦值的時候,一定要對等,才能正常賦值,比如說:
如果是不對等的情況下,是會報錯的: too many values to unpack>>> a, b, c = (1, 2, 3) >>> a, c (1, 3) >>> [a, b, c] = (1, 2, 3) >>> a, c (1, 3) >>> a, b, c = 'SON' # 剛好三個字元的字串 >>> a, c ('S', 'N')
>>> a, b = 'SON'
Traceback (most recent call last):
File "<pyshell#42>", line 1, in <module>
a, b = 'SON'
ValueError: too many values to unpack (expected 2)
3.0出現瞭解包,一切就簡單多了,如果我不之後字元有多少個時候,都可以如此:>>> a, *b = 'BOOK' >>> a, b ('B', ['O', 'O', 'K']) >>> *a, b = 'BOOK' >>> a, b (['B', 'O', 'O'], 'K')
上面就是序列解包,在賦值時無疑更方便,適用性更強!運用序列解包的功能重寫上面的程式碼:
從上面可以看出: 程式碼更簡潔,也更好理解了!