迭代对象转换
本篇教学会介绍“迭代对象转换”的内建函数,熟悉这些函数后,就能够轻松自在的游走在各个迭代对象之间。
本篇使用的 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)) # [] # 全部取出後只剩下空串列
微信扫码关注
抖音扫码关注