从列表中返回每个元素(Python)

10
我知道在Python中,函数可以返回多个值。我想做的是将列表中的每个元素作为单独的返回值返回。这可能是任意数量的元素,取决于用户输入。我想知道是否有一种Pythonic的方法来实现?
例如,我有一个函数将作为数组返回一对项目,它将返回[a,b]。
但是,根据给定的输入,该函数可能会产生多个成对项,这将导致函数返回[[a,b],[c,d],[e,f]]。相反,我希望它返回[a,b],[c,d],[e,f]。
目前,我已经实现了一个非常简陋的函数,其中有很多临时变量和计数,并正在寻找更清晰的建议。
感谢您的帮助!

2
说Python函数可以返回多个值并不完全正确:这样的函数实际上返回一个元组,在赋值时进行解包。因此,您可以使用 tuple() 将列表简单地转换为元组。如果您的意思是想在多次调用中逐个返回它们,那么您需要使用 yield 并构建生成器,这是完全不同的东西。 - Lee Daniel Crocker
1
值得注意的是,当涉及到“返回多个值”时,元组才是常规选择。你可以愉快地返回一个列表并像元组一样解包它。 - Gareth Latty
6个回答

12

当 Python 函数执行时:

return a, b, c

实际返回的是元组(a, b, c),并且在赋值时会解包元组,因此您可以这样说:

实际返回的是元组(a, b, c),并且在赋值时会解包元组,因此您可以这样说:

x, y, z = f()

一切都好。所以如果您有一个列表

mylist = [4, "g", [1, 7], 9]

你的函数可以简单地执行以下操作:

return tuple(mylist)

表现出你期望的样子:

num1, str1, lst1, num2 = f()

我会按照您的期望完成作业。

如果您真正想要的是一个函数返回不确定数量的东西并作为一个可迭代序列,那么您需要使用yield来生成器实现,但那是另一回事了。


这确实是这个问题所要求的解决方案。不确定为什么选择了另一个答案。 - ananvodo
只需return mylist会得到相同的结果。 - KevinYanesG

10

在这种情况下,有一个非常适合的关键字yield语句。

def foo(a):
    for b in a:
        yield b

这将返回一个生成器,您可以迭代它。
print [b for b in foo([[a, b], [c, d], [e, f]])

4
不是他所问的,但可能是他真正想要的。 - Lee Daniel Crocker
3
顺便提一下,她是女性。 :) - wenzul

2
答案非常简单,只需通过提供所需的分隔符来连接列表的元素。
join方法的语法:
"separator".join(iterable)

例如,让我们考虑一个函数,其中您需要返回所有列表值,用逗号(,)分隔。
def fun(samp_list):
    return ",".join(samp_list)

print(fun(["1","2","3"]))

以下是答案:

1,2,3

示例2:返回以换行符分隔的列表值
def fun(samp_list):
   return "/n".join(samp_list)

print(fun(["1","2","3"]))

这个函数的输出结果如下:
1
2
3

希望这对你有用

请通过投票来支持!


1
欢迎来到 Stack Overflow,我认为 OP 正在寻找 Python 变量的元组。使用 join 函数输出是字符串,之后不能再使用。 - Pierrick Rambaud

0
return *(x for x in range(10)),

这样,您可以利用列表推导式语法,但不会创建列表。相反,您正在将生成器表达式(注意*)解包到元组中(注意,),而不是列表(注意[])。然后您返回该元组。

更多信息请参见:https://dev59.com/7mQn5IYBdhLWcg3wTVl0#47476344


0

0
然而,根据给定的输入,该函数可能会产生多个对,这将导致函数返回[[a,b],[c,d],[e,f]]。相反,我希望它返回[a,b],[c,d],[e,f]。你不能只是使用返回的列表(即列表[[a,b],[c,d],[e,f]])并从中提取元素吗?似乎符合您的任意数量/多个值的标准。

你可以使用 tuple() 将列表转换为元组。Python 多值函数实际上返回一个元组,在赋值时自动解包。 - Lee Daniel Crocker
最终我做了类似这样的事情,基于调用方法的功能。但是@wenzul的建议可能更符合Python风格,我可能会重写它以使用更简洁的yield。谢谢大家! - luisamaria

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