我想在方法中返回多个值,包括列表。
以下工作正常:
def foo():
a = 42
b = [1,2]
return a, b
aa, b_list = foo()
aa, (b1, b2) = foo()
但我不知道如何获得没有第一个元素的列表:
def bar():
a = 42
b = [1,2,3]
return a, b
aa, (_, b_list) = bar()
print(b_list) # Expecting [2,3]
# ValueError: too many values to unpack (expected 2)
是的,我可以获取列表并删除第一个元素,但是有一个单行吗?
这个功能应该是多功能的,例如应该支持两种情况:
aa, whole_list = foo()
aa, first_elem, rest_of_the_list = foo()
答案 0 :(得分:5)
是的,有。您可以使用b_list
解压缩:
aa, (_, *b_list) = bar()
答案 1 :(得分:1)
这称为list slice
;您可以返回列表的连续范围,例如
return a, b[1:]
这个符号为你提供了元素1到最后 - 除了第一个元素之外的所有元素。
如果您需要在返回后删除第一个项目,只需使用相同的语法:
print(b_list[1:])
或永久改变(直到下一个作业)b_list
b_list = b_list[1:]
答案 2 :(得分:1)
不完全是一个衬垫,但我会尝试使用一个命名元组来使retval的性质更清晰
from collections import namedtuple
retval = namedtuple('retval', 'scalar list')
def bar():
a = 42
b = [1,2,3]
return retval(a, b)
rv = bar()
a, b = rv.scalar, rv.list[1:]
答案 3 :(得分:-1)
所以根据我的理解,你想要得到一个42,然后回来是1,2,3
我会尝试
def bar():
a = 42
b = [1,2,3]
return a, b
a, b = bar()
print(b) # Expecting [2,3]
print(aa)