4.3. 串列及元組生成式


除了先前介紹過的方式來建立串列之外,也可以用生成式來建立串列,這樣的建立方式也使得整體語法更具有Python的風格。

串列生成式

串列生成式的語法如下:

[運算式 for 項目 in 可迭代項目]
>>> l = [i for i in range(10)]
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> r = range(1, 6)
>>> type(r)
<class 'range'>

>>> l = [i for i in r]
>>> l
[1, 2, 3, 4, 5]

>>> l = [(i + 1) for i in r]
>>> l
[2, 3, 4, 5, 6]

>>> l = [(i - 1) for i in r]
>>> l
[0, 1, 2, 3, 4]

串列生成式中也可以包含 if 結構:

[運算式 for 項目 in 可迭代項目 if 條件式]
>>> r = range(1, 11)
>>> l = [i for i in r if ((i % 2) == 0)]
>>> l
[2, 4, 6, 8, 10]

>>> l = [i for i in r if ((i % 2) != 0)]
>>> l
[1, 3, 5, 7, 9]

此外,串列生成式中也可以包含 if-else 結構:

[運算式1 if 條件式 else 運算式2 for 項目 in 可迭代項目]
>>> r = range(1, 11)
>>> l = [i if (i % 2) == 0 else '' for i in r]
>>> l
['', 2, '', 4, '', 6, '', 8, '', 10]

元組的生成方式

雖然元組沒有像串列一樣生成式的語法,但是有類似的方式可以生成元組,如下:

tuple(運算式 for 項目 in 可迭代項目)
>>> t = tuple(i for i in range(10))
>>> t
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

>>> r = range(1, 6)
>>> type(r)
<class 'range'>

>>> t = tuple(i for i in r)
>>> t
(1, 2, 3, 4, 5)

在元組的生成方式中同樣也可以包含 if 結構:

tuple(運算式 for 項目 in 可迭代項目 if 條件式)
>>> r = range(1, 11)
>>> t = tuple(i for i in r if (i > 5))
>>> t
(6, 7, 8, 9, 10)

>>> t = tuple(i for i in r if (i <= 5))
>>> t
(1, 2, 3, 4, 5)

另外,元組生成式中同樣也可以包含 if-else 結構:

tuple(運算式1 if 條件式 else 運算式2 for 項目 in 可迭代項目)
>>> r = range(1, 11)
>>> t = tuple(i if (i > 5) else '' for i in r)
>>> t
('', '', '', '', '', 6, 7, 8, 9, 10)

串列與元組的轉換方式

此外,使用 list() 及 tuple() 可以讓串列及元組進行轉換,例如:將一個元組透過 list() 轉換成串列,再利用 tuple() 轉換回元組。

>>> t = (1, 2, 3, 4, 5)
>>> t
(1, 2, 3, 4, 5)

>>> type(t)
<class 'tuple'>

>>> t = list(t)
>>> t
[1, 2, 3, 4, 5]

>>> type(t)
<class 'list'>

>>> t = tuple(t)
>>> t
(1, 2, 3, 4, 5)

參考資料

  • Python編程入門第3版(簡), 第七章, Toby Donaldson著, 人民郵電出版社
  • 精通Python, 第四章, Bill Lubanovic著, 賴屹民譯, 歐萊禮

results matching ""

    No results matching ""