本篇教學會介紹「迭代物件轉換」的內建函式,熟悉這些函式後,就能夠輕鬆自在的遊走在各個迭代物件之間。
原文參考:內建函式 ( 迭代物件轉換 )
本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )
方法 | 說明 |
---|---|
list() | 建立串列。 |
dict() | 建立字典。 |
set() | 建立集合。 |
frozenset() | 建立「不可改變」的集合。 |
tuple() | 建立 tuple。 |
enumerate() | 將「串列、集合、tuple、字典」建立為可迭代並附加索引值的 enumerate 物件。 |
iter() | 將「串列、集合、tuple、字典」建立為可迭代的 iter 物件。 |
next() | 將 enumerate 和 iter 物件的內容「依序取出並移除。 |
list(x) 可以建立空串列,或將「字串、tuple、字典或集合」轉變成串列 ( 參考:串列 list ( 基本 ) )。
a = '12345'
b = (1,2,3,4,5)
c = {1,2,3,4,5,'x','y','z'}
d = {'x':'1','y':'2','z':'3'}
print(list(a)) # ['1', '2', '3', '4', '5']
print(list(b)) # [1, 2, 3, 4, 5]
print(list(c)) # [1, 2, 3, 4, 5, 'z', 'y', 'x']
print(list(d)) # ['x', 'y', 'z']
dict(x) 可以建立空字典,或將「帶有鍵與值、兩個值的二維串列或 tuple、雙字元的字串串列或 tuple」轉變成字典 ( 參考:字典 dictionary )。
a = dict(name='oxxo', age=18, eat=['apple','banana'])
b = dict([['x','100'],['y','200'],['z','300']])
c = dict(['ab','cd','ef'])
print(a) # {'name': 'oxxo', 'age': 18, 'eat': ['apple', 'banana']}
print(b) # {'x': '100', 'y': '200', 'z': '300'}
print(c) # {'a': 'b', 'c': 'd', 'e': 'f'}
set(x) 可以建立空集合,或將「串列、tuple、字串或字典」轉換為集合* ( 參考:集合 set )。
a = set()
b = set([1,2,3,4,5,1,2,3,4,5])
c = set({'x':1,'y':2,'z':3})
d = set('hello')
print(a) # set()
print(b) # {1, 2, 3, 4, 5} 只留下不重複的部分
print(c) # {'x', 'y', 'z'} 如果是字典,只保留鍵
print(d) # {'l', 'o', 'h', 'e'} 只留下不重複的部分
frozenset(x) 可以建立一個「不可改變」的集合,建立方式和 set() 完全相同 ( frozenset 字面意思就是冰凍的 set )。
a = frozenset()
b = frozenset([1,2,3,4,5,1,2,3,4,5])
c = frozenset({'x':1,'y':2,'z':3})
d = frozenset('hello')
print(a) # frozenset()
print(b) # frozenset({1, 2, 3, 4, 5})
print(c) # frozenset({'x', 'z', 'y'})
print(d) # frozenset({'e', 'h', 'l', 'o'})
tuple(x) 可以建立空 tuple,或將「串列、集合、字串或字典」轉換為集合 ( 參考:元組 tuple )。
a = tuple([1,2,3,4,5])
b = tuple('12345')
c = tuple({'1','2','3','4','5'})
d = tuple({'x':'1','y':'2','z':'3'})
print(a) # (1, 2, 3, 4, 5)
print(b) # ('1', '2', '3', '4', '5')
print(c) # ('4', '2', '3', '1', '5')
print(d) # ('x', 'y', 'z')
enumerate() 可以將「串列、集合、tuple、字典」建立為可迭代並附加索引值的 enumerate 物件,start 的數值代表索引值開始的數字,預設從 0 開始 ( 不填入預設 0 )。
a = enumerate(['a','b','c'])
b = enumerate(('a','b','c'))
c = enumerate({'a','b','c'})
d = enumerate({'a':1,'b':2,'c':3}, start=2)
print(a) # <enumerate object at 0x7f8de8677050>
print(list(a)) # [(0, 'a'), (1, 'b'), (2, 'c')]
print(list(b)) # [(0, 'a'), (1, 'b'), (2, 'c')]
print(list(c)) # [(0, 'a'), (1, 'b'), (2, 'c')]
print(list(d)) # [(2, 'a'), (3, 'b'), (4, 'c')] 設定 start=2,第一項的索引值變成 2
iter() 可以將「串列、集合、tuple、字典」建立為可迭代的 iter 物件,下方程式可以看到不同型態的 iter 物件。
a = iter([1,2,3])
b = iter((1,2,3))
c = iter({'a','b','c'})
d = iter({'a':1,'b':2,'c':3})
print(a) # <list_iterator object at 0x7f8de866e450>
print(b) # <tuple_iterator object at 0x7f8de866ec90>
print(c) # <set_iterator object at 0x7f8de86c0910>
print(d) # <dict_keyiterator object at 0x7f8de86ec7d0>
next() 通常和 iter() 與 enumerate() 搭配,可以將 enumerate 和 iter 物件的內容「依序取出並移除」,每執行一次就取出一個,直到完全取出為止。
a = enumerate(['a','b','c'])
print(next(a)) # (0, 'a')
print(next(a)) # (1, 'b')
print(next(a)) # (2, 'c')
print(list(a)) # [] # 全部取出後只剩下空串列
b = iter(['a','b','c'])
print(next(b)) # a
print(next(b)) # b
print(next(b)) # c
print(list(b)) # [] # 全部取出後只剩下空串列
大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我有個超過一千篇教學的 STEAM 教育學習網,有興趣可以參考下方連結呦~ ^_^