Python學習之zip函式
Python 學習之 zip 函式
問題的引出
有時候,你可能想同時迭代兩個序列。假設有下面兩個列表:
names = ['anne', 'beth', 'george', 'damon']
ages = [12, 45, 32, 102]
如果要列印名字和對應的年齡,可以這樣做:
>>> names = ['anne', 'beth', 'george', 'damon']
>>> ages = [12, 45, 32, 102]
>>> for i in range(len(names)):
... print(names[i], 'is', ages[i], 'years old')
...
anne is 12 years old
beth is 45 years old
george is 32 years old
damon is 102 years old
>>>
你可能覺得有點麻煩,尤其是第3行,寫的程式碼有點多。有沒有更好的辦法呢?
並行迭代工具zip
Python 提供了一個很有用的並行迭代工具——內建函式 zip,它將兩個序列“縫合”起來,並返回一個由元組組成的序列。返回值是一個適合迭代的物件,要檢視其內容,可使用list將其轉換為列表。
>>> list(zip(names, ages))
[('anne', 12), ('beth', 45), ('george', 32), ('damon', 102)]
“縫合”後,可在迴圈中將元組解包。
>>> for name, age in zip(names, ages):
... print(name, 'is', age, 'years old')
...
anne is 12 years old
beth is 45 years old
george is 32 years old
damon is 102 years old
>>>
函式zip可用於“縫合”任意數量的序列。需要指出的是,當序列的長度不同時,函式zip將在最短的序列用完後停止“縫合”。
>>> list(zip(range(5), range(100000000)))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
以下是其他的例子:
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b) # 返回一個物件
>>> zipped
<zip object at 0x103abc288>
>>> list(zipped) # 用 list() 轉換為列表
[(1, 4), (2, 5), (3, 6)]
>>> list(zip(a,c)) # 元素個數與最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> list(zip(a,b,c)) # 縫合3個序列
[(1, 4, 4), (2, 5, 5), (3, 6, 6)]
>>>
也可以把列表和元組縫合在一起。
>>> a = (1,2,3)
>>> b = [4,5,6]
>>> list(zip(a,b))
[(1, 4), (2, 5), (3, 6)]
zip(*)
的用法
操作符*
與zip函式配合可以實現與zip相反的功能,即將“縫合”的序列拆成多個元組。
>>> a = [1,2]
>>> b = [3,4]
>>> c = ['a','b']
>>> zipped = zip(a,b,c) # 縫合
>>> a1, a2, a3 = zip(*zipped) # 拆包
>>> a1
(1, 2)
>>> a2
(3, 4)
>>> a3
('a', 'b')
>>> b1,b2,b3 = zip(*zip(a,b,c))
>>> b1
(1, 2)
>>> b2
(3, 4)
>>> b3
('a', 'b')
參考資料
[1] http://www.runoob.com/python3/python3-func-zip.html
[2]《Python基礎教程》人民郵電出版社,第3版
相關文章
- Python學習之函式Python函式
- python中id()函式、zip()函式、map()函式、lamda函式Python函式
- python中zip()函式的用法Python函式
- (十六)Python學習之內建函式Python函式
- python常用函式進階(2)之map,filter,reduce,zipPython函式Filter
- 零基礎學習 Python 之函式Python函式
- Python學習之函式返回多個值Python函式
- zip-zip(子函式呼叫)函式
- Python中zip函式的使用方法Python函式
- 22.python自定義函式(format,zip)Python函式ORM
- python學習總結之 函式定義defPython函式
- Python 中級學習之函式裝飾器Python函式
- Python---python函式學習總結Python函式
- Python學習-字串函式操作1Python字串函式
- Python學習-字串函式操作3Python字串函式
- Python學習之路7-函式Python函式
- python學習筆記(六)——函式Python筆記函式
- PHP 學習總結之函式PHP函式
- 簡單介紹Python中的配對函式zip()Python函式
- python菜鳥教程學習9:函式Python函式
- Python學習筆記 - filter,map,reduce,zipPython筆記Filter
- Python合集之Python函式Python函式
- [轉載] python數學計算模組之math常用函式學習使用Python函式
- Python之函式5.1Python函式
- 數學建模例題例 2.24 zip()函式使用示例函式
- 函式學習函式
- 新手學python之Python的輸入輸出函式Python函式
- Python3學習(18)--偏函式(Partial)Python函式
- Python學習筆記|Python之推導式Python筆記
- jmeter學習指南之常用函式的使用JMeter函式
- pandas之常用基本函式學習筆記函式筆記
- Python3.5.2 document學習系列之03、The Python Standard Library(python 標準庫)——內建函式Python函式
- Python學習系列之類的定義、建構函式 def __init__Python函式
- 理解zip函式的工作流程函式
- spark RDD的學習,filter函式的學習,split函式的學習SparkFilter函式
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter
- MySQL函式學習(一)-----字串函式MySql函式字串
- spark三種清理資料的方式:UDF,自定義函式,spark.sql;Python中的zip()與*zip()函式詳解//及python中的*args和**kwargsSpark函式SQLPython