目录
  • 问题描述
  • 解决方案
    • 1.将n个元素赋值给n个变量,可以通过如下一个简单的赋值语句实现。
    • 2.如何将n个元素赋值给m个变量(m<n)?
  • 总结
    • 1.任何可迭代对象都可以实现这种解压赋值,包括列表、元组、字符串、文件对象、迭代器和生成器。
    • 2.有时候,你想解压一些元素后丢弃它们,可以使用一个普通的废弃名称,比如_或者ign(ignore)。
    • 3.迭代元素为可变长元组的序列:
    • 4.字符串的分割

问题描述

现在有一个包含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
“””

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注www.887551.com的更多内容!