Python解压可迭代对象赋值给多个变量详解
时间:2022-02-28 09:21:36|栏目: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
"""
上一篇:jupyter notebook使用argparse传入list参数
栏 目:Python代码
本文地址:http://www.codeinn.net/misctech/194832.html