iT邦幫忙

2023 iThome 鐵人賽

DAY 11
0
Software Development

跟著 OXXO 一起學 Python系列 第 21

( Day 11.1 ) Python 內建函式 ( 迭代物件轉換 )

  • 分享至 

  • xImage
  •  

本篇教學會介紹「迭代物件轉換」的內建函式,熟悉這些函式後,就能夠輕鬆自在的遊走在各個迭代物件之間。

原文參考:內建函式 ( 迭代物件轉換 )

本篇使用的 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)

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)

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)

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)

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(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(x, start=y)

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(x)

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(x)

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 教育學習網,有興趣可以參考下方連結呦~ ^_^


上一篇
( Day 10.3 ) Python 集合 set
下一篇
( Day 11.2 ) Python 內建函式 ( 迭代物件操作 )
系列文
跟著 OXXO 一起學 Python101
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言