最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中使用zip函數(shù)的七重境界解析

 更新時(shí)間:2022年12月26日 10:47:33   作者:趙卓不凡  
這篇文章主要介紹了Python中使用zip函數(shù)的七重境界,重點(diǎn)介紹了Python中功能強(qiáng)大的zip 函數(shù)的多種用法,并給出了相應(yīng)的代碼示例,需要的朋友可以參考下

1. 引言

Python中有一些內(nèi)置函數(shù),可以使我們的代碼非常優(yōu)雅。zip 函數(shù)就是其中之一,但是zip 函數(shù)的使用對于初學(xué)者來說不是很直觀,有時(shí)容易出錯(cuò)。因此本文將從7個(gè)層次來由淺入深地來探討強(qiáng)大的zip 函數(shù)的概念、用法和技巧。
閑話少說,我們直接開始吧!

2. Level 0: 了解zip函數(shù)基礎(chǔ)語法

zip 函數(shù)用于將可迭代的對象作為參數(shù),將對象中對應(yīng)的元素打包成一個(gè)個(gè)元組,然后返回由這些元組組成的iterator。
舉例如下,我們可以使用它以如下方式來組合兩個(gè)列表,樣例代碼如下:

id = [1, 2, 3, 4]
leaders = ['Elon Mask', 'Tim Cook', 'Bill Gates', 'Bai Li']
record = zip(id, leaders)

print(record)
# <zip object at 0x7f266a707d80>

print(list(record))
# [(1, 'Elon Mask'), (2, 'Tim Cook'), (3, 'Bill Gates'), (4, 'Bai Li')]

如上面的示例所示,zip 函數(shù)返回一個(gè)元組迭代器,其中第i 個(gè)元組包含每個(gè)列表中的第i 個(gè)元素。

3. Level 1: zip函數(shù)同時(shí)處理多個(gè)對象

事實(shí)上,Python中的zip 函數(shù)具有強(qiáng)大的功能,比如它可以一次處理任意數(shù)量的可迭代項(xiàng),而不僅僅是兩個(gè)。

首先,我們來看如果我們將一個(gè)list 傳遞給 zip 函數(shù),樣例如下:

id = [1, 2, 3, 4]
record = zip(id)
print(list(record))
# [(1,), (2,), (3,), (4,)]

如果我們同時(shí)傳遞三個(gè)list ,結(jié)果如下:

id = [1, 2, 3, 4]
leaders = ['Elon Mask', 'Tim Cook', 'Bill Gates', 'Bai Li']
sex = ['m', 'm', 'm', 'm']
record = zip(id, leaders, sex)

print(list(record))
# [(1, 'Elon Mask', 'm'), (2, 'Tim Cook', 'm'), (3, 'Bill Gates', 'm'), (4, 'Bai Li', 'm')]

如上所述,無論我們傳遞給zip函數(shù)多少個(gè)可迭代項(xiàng),它都能按照我們的預(yù)期來正常工作。
順便說一下,如果沒有參數(shù),zip 函數(shù)只返回一個(gè)空的迭代器。

4. Level 2: zip函數(shù)處理長度不等的參數(shù)

真實(shí)數(shù)據(jù)并不總是干凈和完整的,有時(shí)我們必須處理不等長的可迭代數(shù)據(jù)。默認(rèn)情況下,zip函數(shù)的結(jié)果基于最短的可迭代項(xiàng)。
舉例如下:

id = [1, 2]
leaders = ['Elon Mask', 'Tim Cook', 'Bill Gates', 'Bai Li']
record = zip(id, leaders)

print(list(record))
# [(1, 'Elon Mask'), (2, 'Tim Cook')]

如上面的代碼所示,最短的列表是id ,因此record 只包含兩個(gè)元組,并且忽略了列表leaders 中的最后兩個(gè)元素。
如果最后兩位leader 因被忽視而不高興,我們該怎么辦?
Python將再次幫助我們。itertools 模塊中還有一個(gè)名為zip_langest 的函數(shù)。顧名思義,它是zip函數(shù)的兄弟,其結(jié)果基于最長的參數(shù)。
我們不妨使用zip_langest 函數(shù)來生成上述record列表,結(jié)果如下:

from itertools import zip_longest
id = [1, 2]
leaders = ['Elon Mask', 'Tim Cook', 'Bill Gates', 'Bai Li']

long_record = zip_longest(id, leaders)
print(list(long_record))
# [(1, 'Elon Mask'), (2, 'Tim Cook'), (None, 'Bill Gates'), (None, 'Bai Li')]

long_record_2 = zip_longest(id, leaders, fillvalue='Top')
print(list(long_record_2))
# [(1, 'Elon Mask'), (2, 'Tim Cook'), ('Top', 'Bill Gates'), ('Top', 'Bai Li')]

如上所述,zip_langest 函數(shù)基于其最長參數(shù)來返回結(jié)果??蛇x的fillvalue 參數(shù)(默認(rèn)值為None )可以幫助我們填充缺失的值。

5. Level 3: 掌握unzip操作

在上一個(gè)示例中,如果我們首先獲得列表record ,那么我們?nèi)绾螌⑵?code>unzip 解壓縮為單獨(dú)的可迭代項(xiàng)?
不幸的是,Python并沒有直接的解壓縮unzip 函數(shù)。然而,如果我們熟悉星號* 的技巧,解壓縮將是一項(xiàng)非常簡單的任務(wù)。

record = [(1, 'Elon Mask'), (2, 'Tim Cook'), (3, 'Bill Gates'), (4, 'Bai Li')]
id, leaders = zip(*record)
print(id)
# (1, 2, 3, 4)
print(leaders)
# ('Elon Mask', 'Tim Cook', 'Bill Gates', 'Bai Li')

在上面的示例中,星號執(zhí)行了拆包操作,即從記錄列表中拆包所有四個(gè)元組。

6. Level 4: 通過zip函數(shù)創(chuàng)建和更新dict

受益于功能強(qiáng)大的zip 函數(shù),基于一些獨(dú)立的列表來創(chuàng)建和更新dict 將非常方便。
我們可以使用以下one-line的方案:
● 使用字典生成式和zip函數(shù)
● 使用dict和zip函數(shù)
樣例代碼如下:

id = [1, 2, 3, 4]
leaders = ['Elon Mask', 'Tim Cook', 'Bill Gates', 'Bai Li']

# create dict by dict comprehension
leader_dict = {i: name for i, name in zip(id, leaders)}
print(leader_dict)
# {1: 'Elon Mask', 2: 'Tim Cook', 3: 'Bill Gates', 4:'Bai Li'}

# create dict by dict function
leader_dict_2 = dict(zip(id, leaders))
print(leader_dict_2)
# {1: 'Elon Mask', 2: 'Tim Cook', 3: 'Bill Gates', 4: 'Bai Li'}

# update
other_id = [5, 6]
other_leaders = ['Larry Page', 'Sergey Brin']
leader_dict.update(zip(other_id, other_leaders))
print(leader_dict)
# {1: 'Elon Mask', 2: 'Tim Cook', 3: 'Bill Gates', 4: ''Bai Li'', 5: 'Larry Page', 6: 'Sergey Brin'}

上面的示例根本不使用for 循環(huán) , 這是多么的優(yōu)雅和Pythonic!

7. Level 5: 在for循環(huán)中使用zip函數(shù)

同時(shí)處理多個(gè)可迭代項(xiàng)通常是常見的場景, 此時(shí)我們可以在for循環(huán)中配合使用函數(shù)zip ,這也是我最喜歡函數(shù)zip 的用法之一。
舉例如下:

products = ["cherry", "strawberry", "banana"]
price = [2.5, 3, 5]
cost = [1, 1.5, 2]
for prod, p, c in zip(products, price, cost):
    print(f'The profit of a box of {prod} is £{p-c}!')
# The profit of a box of cherry is £1.5!
# The profit of a box of strawberry is £1.5!
# The profit of a box of banana is £3!

8. Level 6: 實(shí)現(xiàn)矩陣轉(zhuǎn)置

我們來看以下問題:

如何優(yōu)雅地實(shí)現(xiàn)矩陣的轉(zhuǎn)置操作?

Wow, 鑒于在上文中我們已經(jīng)介紹了函數(shù)zip ,星號* ,以及列表生成式,所以one-line 的實(shí)現(xiàn)方式如下:

matrix = [[1, 2, 3], [1, 2, 3]]
matrix_T = [list(i) for i in zip(*matrix)]
print(matrix_T)
# [[1, 1], [2, 2], [3, 3]]

9. 總結(jié)

本文重點(diǎn)介紹了Python中功能強(qiáng)大的zip 函數(shù)的多種用法,并給出了相應(yīng)的代碼示例。

到此這篇關(guān)于Python中使用zip函數(shù)的七重境界的文章就介紹到這了,更多相關(guān)Python中使用zip函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • tensorflow實(shí)現(xiàn)邏輯回歸模型

    tensorflow實(shí)現(xiàn)邏輯回歸模型

    這篇文章主要為大家詳細(xì)介紹了tensorflow實(shí)現(xiàn)邏輯回歸模型的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Python命令行參數(shù)定義及需要注意的地方

    Python命令行參數(shù)定義及需要注意的地方

    這篇文章主要介紹了Python命令行參數(shù)定義及需要注意的地方,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-11-11
  • python PyTorch預(yù)訓(xùn)練示例

    python PyTorch預(yù)訓(xùn)練示例

    這篇文章主要介紹了python PyTorch預(yù)訓(xùn)練示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • 使用Python的PEAK來適配協(xié)議的教程

    使用Python的PEAK來適配協(xié)議的教程

    這篇文章主要介紹了使用Python的PEAK來適配協(xié)議的教程,來自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • python用字節(jié)處理文件實(shí)例講解

    python用字節(jié)處理文件實(shí)例講解

    在本篇文章里小編給大家整理的是一篇關(guān)于python用字節(jié)處理文件實(shí)例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-04-04
  • 在python3.9下如何安裝scrapy的方法

    在python3.9下如何安裝scrapy的方法

    這篇文章主要介紹了在python3.9下如何安裝scrapy的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 10 行 Python 代碼教你自動發(fā)送短信(不想回復(fù)工作郵件妙招)

    10 行 Python 代碼教你自動發(fā)送短信(不想回復(fù)工作郵件妙招)

    這篇文章主要介紹了10 行 Python 代碼教你自動發(fā)送短信(不想回復(fù)工作郵件妙招),目前在國內(nèi)通過手機(jī)短信保障信息安全是比較常見的,具體實(shí)例代碼大家跟隨小編一起通過本文學(xué)習(xí)吧
    2018-10-10
  • Python基于模塊Paramiko實(shí)現(xiàn)SSHv2協(xié)議

    Python基于模塊Paramiko實(shí)現(xiàn)SSHv2協(xié)議

    這篇文章主要介紹了Python基于模塊Paramiko實(shí)現(xiàn)SSHv2協(xié)議,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 使用python編寫批量卸載手機(jī)中安裝的android應(yīng)用腳本

    使用python編寫批量卸載手機(jī)中安裝的android應(yīng)用腳本

    該腳本的功能是卸載android手機(jī)中安裝的所有第三方應(yīng)用,主要是使用adb shell pm、adb uninstall 命令,需要的朋友可以參考下
    2014-07-07
  • python入門教程之基本算術(shù)運(yùn)算符

    python入門教程之基本算術(shù)運(yùn)算符

    這篇文章主要給大家介紹了關(guān)于python入門教程之基本算術(shù)運(yùn)算符的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評論

客服| 年辖:市辖区| 通渭县| 黎城县| 保康县| 宜君县| 富阳市| 中方县| 潞西市| 雷州市| 灵川县| 莲花县| 叶城县| 兰考县| 垦利县| 长子县| 炉霍县| 龙岩市| 渭源县| 滨海县| 红桥区| 漯河市| 班玛县| 凌云县| 肃北| 泸水县| 新邵县| 轮台县| 高淳县| 临澧县| 德江县| 新疆| 灵川县| 波密县| 酉阳| 河西区| 凉城县| 克东县| 孟州市| 兖州市| 周口市|