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

Python技巧之變長(zhǎng)和定長(zhǎng)序列拆分

 更新時(shí)間:2021年12月03日 09:18:35   作者:Orion's?Blog  
這篇文章主要給大家分享的是Python技巧之變長(zhǎng)和定長(zhǎng)序列拆分,Python中的任何序列(可迭代的對(duì)象)都可以通過(guò)賦值操作進(jìn)行拆分,包括但不限于元組、列表、字符串、文件、迭代器、生成器等。想了解更多詳細(xì)的小伙伴請(qǐng)參考下面文章內(nèi)容

Python中的任何序列(可迭代的對(duì)象)都可以通過(guò)賦值操作進(jìn)行拆分,包括但不限于元組、列表、字符串、文件、迭代器、生成器等。

1.元組拆分

元組拆分是最為常見(jiàn)的一種拆分,示例如下:

p = (4, 5)
x, y = p 
print(x, y) # 4 5

如果寫成

x, y, z = p

那么就會(huì)拋出ValueError異常:not enough values to unpack (expected 3, got 2)”

如果寫成

p = (4, 5, 6)
x, y = p

那么就會(huì)拋出ValueError異常: “ too many values to unpack (expected 2)”

2.字符串拆分

字符串的拆分示意如下:

s = 'Hello'
a, b, c, d, e = s
print(a) # H

3.拆分時(shí)丟棄值

如果在拆分時(shí)想丟棄某些特定的值,可以用一個(gè)用不到的變量名來(lái)作為丟棄值的名稱(常選'_'做為變量名),如下所示:

s = 'Hello'
a, b, _, d, _ = s
print(a) # H

4.嵌套序列拆分

Python也提供簡(jiǎn)潔的對(duì)嵌套序列進(jìn)行拆分的語(yǔ)法。如下所示我們對(duì)一個(gè)比較復(fù)雜的異質(zhì)列表進(jìn)行拆分:

data = ['zhy', 50, 123.0, (2000, 12, 21)]
name, shares, price, (year, month, day) = data
print(year) # 2000

如果你想完整地得到(2000, 12, 21)這個(gè)表示時(shí)間戳的元組,那么你就得這樣寫:

data = ['zhy', 50, 123.0, (2000, 12, 21)]
name, shares, price, date = data
print(date) # (2000, 12, 21)

5.從任意長(zhǎng)度的可迭代對(duì)象中拆分

之前我們說(shuō)過(guò),如果我們想從可迭代對(duì)象中分解出N個(gè)元素,但如果這個(gè)可迭代對(duì)象長(zhǎng)度超過(guò)N,則會(huì)拋出異常"too many values to unpack"。針對(duì)這個(gè)問(wèn)題的解決方案是采用"*"表達(dá)式。
比如我們給定學(xué)生的分?jǐn)?shù),想去掉一個(gè)最高分和一個(gè)最低分,然后對(duì)剩下的學(xué)生求平均分,我們可以這樣寫:

def avg(data: list):
    return sum(data)/len(data)
# 去掉最高分,最低分然后做均分統(tǒng)計(jì)
def drop_first_last(grades):
    first, *middle, last = grades
    return avg(middle)
print(drop_first_last([1,2,3,4])) # 2.5

還有一種情況是有一些用戶記錄,記錄由姓名+電子郵件+任意數(shù)量的電話號(hào)碼組成,則我們可以這樣分解用戶記錄:

record = ['zhy', 'zhy1056692290@qq.com', '773-556234', '774-223333']
name, email, *phone_numbers = record
print(phone_numbers) # ['773-556234', '774-223333']

事實(shí)上,如果電話號(hào)碼為空也是合法的,此時(shí)phone_numbers為空列表。

record = ['zhy', 'zhy1056692290@qq.com']
name, email, *phone_numbers = record
print(phone_numbers) # []

還有一種使用情況則更為巧妙。如果我們需要遍歷變長(zhǎng)元組組成的列表,這些元組長(zhǎng)度不一。那么此時(shí)*表達(dá)式可大大簡(jiǎn)化我們的代碼。

records = [('foo', 1, 2), ('bar', 'hello'), ('foo', 3, 4)]
for tag, *args in records:
    if tag == 'bar':
        print(args)
# ['hello']

在對(duì)一些復(fù)雜的字符串進(jìn)行拆分時(shí),*表達(dá)式也顯得特別有用。

line = "nobody:*:-2:-2:-2:Unprivileged User:/var/empty:/usr/bin/false"
uname, *fields, home_dir, sh = line.split(':')
print(home_dir) # /var/empty

*表達(dá)式也可以和我們前面說(shuō)的嵌套拆分和變量丟棄一起結(jié)合使用。

record = ['ACME', 50, 123.45, (128, 18, 2012)]
name, *_, (*_, year) = record
print(year) # 2012

最后再介紹*表達(dá)式用于遞歸函數(shù)的一種黑魔法,比如與遞歸求和結(jié)合可以這樣寫:

items = [1, 10, 7, 4, 5, 9]
def sum(items):
    head, *tail = items
    return head + sum(tail) if tail else head
print(sum(items)) # 36

不過(guò),Python由于自身遞歸棧的限制,并不擅長(zhǎng)遞歸。我們最后一個(gè)遞歸的例子可以做為一種學(xué)術(shù)上的嘗試,但不建議在實(shí)踐中使用它。

到此這篇關(guān)于Python技巧之變長(zhǎng)和定長(zhǎng)序列拆分的文章就介紹到這了,更多相關(guān)Python變長(zhǎng)和定長(zhǎng)序列拆分內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于Python參數(shù)解析器argparse的應(yīng)用場(chǎng)景

    關(guān)于Python參數(shù)解析器argparse的應(yīng)用場(chǎng)景

    這篇文章主要介紹了關(guān)于Python參數(shù)解析器argparse的應(yīng)用場(chǎng)景,argparse 模塊使編寫用戶友好的命令行界面變得容易,程序定義了所需的參數(shù),而 argparse 將找出如何從 sys.argv 中解析這些參數(shù),需要的朋友可以參考下
    2023-08-08
  • Python數(shù)據(jù)結(jié)構(gòu)與算法中的隊(duì)列詳解(1)

    Python數(shù)據(jù)結(jié)構(gòu)與算法中的隊(duì)列詳解(1)

    這篇文章主要為大家詳細(xì)介紹了Python的隊(duì)列,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • Python利用cv2動(dòng)態(tài)繪制圓和矩形的示例詳解

    Python利用cv2動(dòng)態(tài)繪制圓和矩形的示例詳解

    這篇文章主要為大家詳細(xì)介紹了Python如何利用cv2實(shí)現(xiàn)動(dòng)態(tài)繪制圓和矩形的功能,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,需要的可以參考一下
    2023-03-03
  • PyTorch-GPU加速實(shí)例

    PyTorch-GPU加速實(shí)例

    這篇文章主要介紹了PyTorch-GPU加速實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • Python操作PDF圖片的基本方法(增刪改查)

    Python操作PDF圖片的基本方法(增刪改查)

    PDF文件中的圖片可以豐富文檔內(nèi)容,提升用戶的閱讀體驗(yàn),除了在PDF中添加圖片外,有時(shí)也需要替換或刪除其中的圖片,文本將提供三個(gè)示例,介紹如何使用Python?操作PDF文件中的圖片,需要的朋友可以參考下
    2024-04-04
  • Python實(shí)現(xiàn)Excel文件的合并(以新冠疫情數(shù)據(jù)為例)

    Python實(shí)現(xiàn)Excel文件的合并(以新冠疫情數(shù)據(jù)為例)

    這篇將以新冠疫情數(shù)據(jù)為例,詳細(xì)介紹了如何利用Python實(shí)現(xiàn)合并Excel文件,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-03-03
  • python語(yǔ)言time庫(kù)和datetime庫(kù)基本使用詳解

    python語(yǔ)言time庫(kù)和datetime庫(kù)基本使用詳解

    這篇文章主要介紹了python語(yǔ)言time庫(kù)和datetime庫(kù)基本使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • python內(nèi)存泄漏排查技巧總結(jié)

    python內(nèi)存泄漏排查技巧總結(jié)

    這篇文章主要給大家分享了python內(nèi)存泄漏排查技巧總結(jié),工作過(guò)程中服務(wù)難免遇到內(nèi)存泄漏問(wèn)題,下面文章就給大家總結(jié)一些排查下技巧,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2021-12-12
  • 利用Python代碼實(shí)現(xiàn)模擬動(dòng)態(tài)指針時(shí)鐘

    利用Python代碼實(shí)現(xiàn)模擬動(dòng)態(tài)指針時(shí)鐘

    這篇文章主要為大家詳細(xì)介紹了如何利用python和C++代碼實(shí)現(xiàn)模擬動(dòng)態(tài)指針時(shí)鐘,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2023-04-04
  • python模塊詳解之pywin32使用文檔(python操作windowsAPI)

    python模塊詳解之pywin32使用文檔(python操作windowsAPI)

    pywin32是一個(gè)第三方模塊庫(kù),主要的作用是方便python開(kāi)發(fā)者快速調(diào)用windows API的一個(gè)模塊庫(kù),這篇文章主要給大家介紹了關(guān)于python模塊詳解之pywin32使用文檔的相關(guān)資料,文中將python操作windowsAPI介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01

最新評(píng)論

潼南县| 惠安县| 博乐市| 仙桃市| 彭州市| 西乌| 平湖市| 延寿县| 深圳市| 乌鲁木齐县| 永登县| 文登市| 木兰县| 长兴县| 收藏| 天峻县| 滦平县| 哈巴河县| 乌拉特后旗| 施秉县| 福清市| 乳源| 漳浦县| 五莲县| 顺平县| 靖江市| 河北区| 乐昌市| 三门峡市| 通许县| 南江县| 通江县| 黄大仙区| 黄浦区| 平定县| 邮箱| 石阡县| 班玛县| 旅游| 旌德县| 威远县|