欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python技巧之變長和定長序列拆分

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

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

1.元組拆分

元組拆分是最為常見的一種拆分,示例如下:

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

如果寫成

x, y, z = p

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

如果寫成

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

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

2.字符串拆分

字符串的拆分示意如下:

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

3.拆分時丟棄值

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

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

4.嵌套序列拆分

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

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

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

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

5.從任意長度的可迭代對象中拆分

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

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

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

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

事實上,如果電話號碼為空也是合法的,此時phone_numbers為空列表。

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

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

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

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

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

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

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

最后再介紹*表達式用于遞歸函數(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

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

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

相關(guān)文章

  • python中pickle模塊淺析

    python中pickle模塊淺析

    在本篇文章里小編給大家整理的是關(guān)于python中pickle模塊的基礎(chǔ)知識點內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2020-12-12
  • 一小時學(xué)會TensorFlow2之Fashion Mnist

    一小時學(xué)會TensorFlow2之Fashion Mnist

    這篇文章主要介紹了TensorFlow2之Fashion Mnist,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • django中path函數(shù)使用詳解

    django中path函數(shù)使用詳解

    django.urls.path是Django中用于定義URL映射規(guī)則的函數(shù)之一,本文主要介紹了django中path函數(shù)使用,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • 100行Python代碼實現(xiàn)每天不同時間段定時給女友發(fā)消息

    100行Python代碼實現(xiàn)每天不同時間段定時給女友發(fā)消息

    這篇文章主要介紹了100行Python代碼,每天不同時間段定時給女友發(fā)消息,本文給出了實現(xiàn)思路,代碼簡單易懂非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • Python Pytest裝飾器@pytest.mark.parametrize詳解

    Python Pytest裝飾器@pytest.mark.parametrize詳解

    本文主要介紹了Python Pytest裝飾器@pytest.mark.parametrize詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Python PO設(shè)計模式的具體使用

    Python PO設(shè)計模式的具體使用

    這篇文章主要介紹了Python PO設(shè)計模式的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • pyecharts調(diào)整圖例與各板塊的位置間距實例

    pyecharts調(diào)整圖例與各板塊的位置間距實例

    這篇文章主要介紹了pyecharts調(diào)整圖例與各板塊的位置間距實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python基于template實現(xiàn)字符串替換

    Python基于template實現(xiàn)字符串替換

    這篇文章主要介紹了Python基于template實現(xiàn)字符串替換,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • 你需要學(xué)會的8個Python列表技巧

    你需要學(xué)會的8個Python列表技巧

    這篇文章主要介紹了8個常用的Python列表技巧,文中講解非常詳細,幫助大家更好的學(xué)習(xí)Python,感興趣的朋友可以了解下
    2020-06-06
  • Python+Pygame實現(xiàn)彩色五子棋游戲

    Python+Pygame實現(xiàn)彩色五子棋游戲

    這篇文章主要為大家詳細介紹了如何溧陽Python和Pygame實現(xiàn)彩色五子棋游戲,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-02-02

最新評論