Python Cookbook之数据结构与算法

从任意长度的可迭代对象中分解元素

问题:需要从某个可迭代对象中分解出N个元素,但是这个可迭代对象的长度可能超过N,会导致出现“too many values to unpack”的异常。

解决方案:

Python的“*表达式”可以用来解决这个问题。
例如:假设开设了一门课程,并且决定在期末的作业成绩中去掉第一个和最后一个,只对中间剩下的成绩做平均分统计。*表达式可以解决这样的问题。

def drop_first_last(grades):
	first,*middle,last = grades
	return avg(middle)

*表达式在迭代一个变长的元组序列时尤其有用。

records [
	('foo',1,2),
	('bar','hello'),
	('foo',3,4),
]

def do_foo(x,y):
	print('foo',x,y)

def do_bar(s):
	print('bar',s)

for tag,*args in records:
	if tag == 'foo':
		do_foo(*args)
	elif tag == 'bar':
		do_bar(*args)

*分解操作和各种函数式语言中的列表处理功能有着一定的相似性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值