Python解壓可迭代對象賦值給多個變量詳解
問題描述
現在有一個包含N個元素的可迭代對象,怎樣把它裡面的元素解壓後同時賦值給N個變量?怎樣同時賦值給M個變量(M<N)?
解決方案
1.將N個元素賦值給N個變量,可以通過如下一個簡單的賦值語句實現。
p = [4, 5] x, y = p print(x, y) # 輸出結果:4 5 data = ['Test', 1, 3.14, (2021, 12, 1)] a, b, c, d = data print(a, b, c, d) # 輸出結果:Test 1 3.14 (2021, 12, 1) a, b, c, (year, month, day) = data print(a, b, c, year, month, day) # 輸出結果:Test 1 3.14 2021 12 1
2.如何將N個元素賦值給M個變量(M<N)?
當變量的個數少於可迭代對象元素的個數時,程序會拋出ValueError。這時,可以用Python的星號表達式來解決。
data = [1, 2, 3, 4, 5] a, b, *c, d = data print(a, b, c, d) # 輸出結果:1 2 [3, 4] 5
需要註意的是上面解壓出的c變量永遠是list類型,不管c的元素有幾個(包括0個)。
總結
迭代解壓語法的幾個應用場景:
1.任何可迭代對象都可以實現這種解壓賦值,包括列表、元組、字符串、文件對象、迭代器和生成器。
比如:
s = 'hello' a, b, c, d, e = s print(a, b, c, d, e)
# 輸出結果:h e l l o
2.有時候,你想解壓一些元素後丟棄它們,可以使用一個普通的廢棄名稱,比如_或者ign(ignore)。
record = ('ACME', 50, 123.45, (12, 18, 2012)) name, *_, (*_, year) = record print(name, year)
“””
輸出結果:
ACME 2012
“””
3.迭代元素為可變長元組的序列:
records = [ ('foo', 1, 2), ('bar', 'hello'), ('foo', 3, 4), ] def print_foo(x, y): print('foo', x, y) def print_bar(s): print('bar', s) for tag, *args in records: if tag == 'foo': print_foo(*args) elif tag == 'bar': print_bar(*args)
“””
輸出結果:
foo 1 2
bar hello
foo 3 4
“””
4.字符串的分割
line = 'nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false' uname, *field, homedir, sh = line.split(':') print(uname, homedir, sh)
“””
輸出結果:
nobody /var/empty /usr/bin/false
“””
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!