【发布时间】:2017-06-29 16:49:21
【问题描述】:
当使用一个通过元组返回多个值的函数时,我经常会发现自己使用以下惯用语从列表推导式中解压缩结果。
fiz, buz = zip(*[f(x) for x in input])
大多数情况下这工作正常,但如果input 为空,它会抛出ValueError: need more than 0 values to unpack。我能想到的解决这个问题的两种方法是
fiz = []
buz = []
for x in input:
a, b = f(x)
fiz.append(a)
buz.append(b)
和
if input:
fiz, buz = zip(*[f(x) for x in input])
else:
fiz, buz = [], []
但是这些都不是 Python 风格的——前者过于冗长,而后者在输入是生成器而不是列表时不起作用(除了需要 if/else 我觉得真的不应该需要)。
有没有很好的简单方法来做到这一点?我最近大部分时间都在使用 Python 2.7,但如果它们不同,我也有兴趣了解任何 Python 3 解决方案。
【问题讨论】:
标签: python