如何在Python中返回一个未打包的列表?

14

我想在Python中做类似这样的事情:

def f():
    b = ['c', 8]
    return 1, 2, b*, 3

我希望 f 返回元组 (1, 2, 'c', 8, 3)。我找到了一种使用 itertools 然后跟上 tuple 的方法,但这不是很好,我想知道是否存在一种更优雅的方法来实现。

2个回答

21
b 前面出现了展开运算符 *,而不是在后面。
return (1, 2, *b, 3)
#      ^      ^^   ^

不过,这只适用于Python 3.5+(PEP 448)。另外你需要添加括号来避免语法错误。在旧版本中,请使用 + 来连接元组:

return (1, 2) + tuple(b) + (3,)

如果b已经是一个元组而不是列表,您就不需要使用tuple函数调用:

def f():
    b = ('c', 8)
    return (1, 2) + b + (3,)

def func(): list1 = [1,2,3] return *list1有没有办法实现这个功能?使用 print(*list1) 是可能的,但我想返回格式化后的字符串或普通的字符串。 - Azhar Uddin Sheikh
@AzharUddinSheikh - 请看下面我的答案。 - shaneb

10
请注意被采纳的回答解释了如何在将某些值作为元组的一部分返回时,解压缩这些值。如果您只想返回已解压缩的列表怎么办?请参考上面的评论:
def func():
   list1 = [1,2,3]
   return *list1

这将导致 SyntaxError: invalid syntax

解决方法是在返回值后面加上括号()以及逗号,,告诉Python这个解压缩的列表是元组的一部分:

def func():
   list1 = [1,2,3]
   return (*list1,)

1
不错的解决方法! - artu-hnrq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接