1. 程式人生 > >從一個例子看Python3.x中序列解包

從一個例子看Python3.x中序列解包

假如一個字串'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之後出現,之前的版本一般賦值的時候,一定要對等,才能正常賦值,比如說:

>>> 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')
如果是不對等的情況下,是會報錯的: too many values to unpack
>>> 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')

上面就是序列解包,在賦值時無疑更方便,適用性更強!運用序列解包的功能重寫上面的程式碼:


從上面可以看出: 程式碼更簡潔,也更好理解了!