<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在python 3.x系列中,zip方法返回的為一個zip object可迭代物件。
class zip(object): """ zip(*iterables) --> zip object Return a zip object whose .__next__() method returns a tuple where the i-th element comes from the i-th iterable argument. The .__next__() method continues until the shortest iterable in the argument sequence is exhausted and then it raises StopIteration. """
通過上面的註釋,不難看出該迭代器的兩個關鍵點:
1.迭代器的next方法返回一個元組,元組的第i個元素為各個輸入引數的第i個元素。
2.迭代器的next方法,遇到輸入序列中最短的那個序列迭代完畢,則會停止執行。
為了看清楚zip的效果,我們先看個最簡單的例子
def fun0(): a = ['a', 'b', 'c', 'd'] b = ['1', '2', '3', '4'] result = zip(a, b) print(type(result)) try: while True: print(next(result)) except StopIteration: pass
上面的程式碼,輸出結果為
<class 'zip'>
('a', '1')
('b', '2')
('c', '3')
('d', '4')
首先可以看到的是,zip方法返回的,是一個zip物件。
zip物件是個迭代器,用next方法即可對其完成遍歷。
當然我們也可以用for迴圈完成對zip物件的遍歷。
def fun00(): a = ['a', 'b', 'c', 'd'] b = ['1', '2', '3', '4'] result = zip(a, b) for ele in result: print(ele)
('a', '1')
('b', '2')
('c', '3')
('d', '4')
zip方法中,如果傳入的引數不等長,則會進行截斷,截斷的時候會取最短的那個序列,超過最短序列長度的其他序列元素,則會被捨棄掉。
def fun0(): a = ['a', 'b', 'c', 'd'] b = ['1', '2', '3', '4', '5', '6'] result = zip(a, b) try: while True: print(next(result)) except StopIteration: pass
上述的方法如果執行,結果為
('a', '1')
('b', '2')
('c', '3')
('d', '4')
python3.x中,zip方法返回的是一個zip物件,本質是一個迭代器。而在python2.x中,zip方法直接返回一個list。
返回迭代器的好處在於,可以節省list佔用的記憶體,只在有需要的時候再呼叫相關資料。
zip方法在實際中用途非常廣泛,我們下面可以看幾個實際中常用的例子。
zip方法可以用來構建字典。
字典包含兩部分資料:key列表與value列表。如果我們現在有key序列與value序列,用zip方法可以很快構建一個字典。
def fun5(): names = ['lili', 'lucy', 'tracy', 'larry'] scores = [98, 10, 75, 90] my_dict = dict(zip(names, scores)) print(my_dict)
{'lili': 98, 'lucy': 10, 'tracy': 75, 'larry': 90}
排序也是日常工作中的常見需求,對多個序列進行排序而不破壞其元素的相對關係,也非常常見。下面我們來看一個常見的案例
還是以之前的資料為例
有names序列與scores序列,我們希望按照names進行排序,同時保持對應的scores資料。
def fun3(): names = ['lili', 'lucy', 'tracy', 'larry'] scores = [98, 10, 75, 90] data = sorted(list(zip(names, scores)), key=lambda x: x[0], reverse=False) print(data)
輸出的結果為
[('larry', 90), ('lili', 98), ('lucy', 10), ('tracy', 75)]
如果我們希望按照分數逆序排,則可以按如下程式碼執行
def fun3(): names = ['lili', 'lucy', 'tracy', 'larry'] scores = [98, 10, 75, 90] data = sorted(list(zip(names, scores)), key=lambda x: x[1], reverse=True) print(data)
[('lili', 98), ('larry', 90), ('tracy', 75), ('lucy', 10)]
假設我們有3個序列,sales,costs,allowances。其中利潤為銷售額-成本+補貼,現在我們想求每組利潤,就可以使用zip方法。
def fun4(): sales = [10000, 9500, 9000] costs = [9000, 8000, 7000] allowances = [200, 100, 150] for sale, cost, allowance in zip(sales, costs, allowances): profit = sale - cost + allowance print(f"profit is: {profit}")
profit is: 1200
profit is: 1600
profit is: 2150
當然我們也可以使用for迴圈
def fun4(): sales = [10000, 9500, 9000] costs = [9000, 8000, 7000] allowances = [200, 100, 150] for sale, cost, allowance in zip(sales, costs, allowances): profit = sale - cost + allowance print(f"profit is: {profit}")
for i in range(len(sales)): profit = sales[i] - costs[i] + allowances[i] print(f"profit is: {profit}")
很明顯zip方法比for迴圈還是要更直觀,更簡潔,更優雅。
我們還可以使用*操作符對zip物件進行解壓,效果是將zip object還原至原來的物件,效果就類似於壓縮以後得解壓。
def fun(): a = ['a', 'b', 'c', 'd'] b = ['1', '2', '3', '4'] result = list(zip(a, b)) print(result) zipobj = zip(a, b) a1, a2 = zip(*zipobj) print(list(a1)) print(a2)
上面程式碼執行的結果為
[('a', '1'), ('b', '2'), ('c', '3'), ('d', '4')]
['a', 'b', 'c', 'd']
('1', '2', '3', '4')
到此這篇關於python3.x zip用法詳解的文章就介紹到這了,更多相關python3 使用 zip內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45