从列表中返回每个元素(Python)
Posted
技术标签:
【中文标题】从列表中返回每个元素(Python)【英文标题】:Returning every element from a list (Python) 【发布时间】:2015-01-31 09:45:07 【问题描述】:我知道一个函数可以在 Python 中返回多个值。我想做的是将列表中的每个元素作为单独的返回值返回。这可以是任意数量的元素,具体取决于用户输入。我想知道是否有这样做的pythonic方式?
例如,我有一个函数会以数组的形式返回一对项目,例如,它将返回 [a, b]
。
但是,根据给定的输入,函数可能会产生多个对,这将导致函数返回 [[a, b], [c, d], [e, f]]
。相反,我希望它返回[a, b], [c, d], [e, f]
到目前为止,我已经实现了一个非常劣质的函数,其中包含大量临时变量和计数,并且正在寻找更简洁的建议。
感谢您的帮助!
【问题讨论】:
说python函数可以返回多个值并不完全正确:这些函数实际上返回一个元组,它在赋值时被解包。因此,您可以使用tuple()
简单地将列表转换为元组。如果您的意思是您想在多次调用中一次返回它们,那么您正在使用 yield
并构建一个生成器,完全是另外一回事。
值得注意的是,元组只是“返回多个值”的标准。您可以愉快地返回一个列表并像元组一样解压它。
【参考方案1】:
有一个yield 语句与此用例完美匹配。
def foo(a):
for b in a:
yield b
这将返回一个您可以迭代的生成器。
print [b for b in foo([[a, b], [c, d], [e, f]])
【讨论】:
不是他问的,但可能是他真正想要的。 @LeeDanielCrocker 顺便说一句。她是她。 :)【参考方案2】:当一个python函数执行时:
return 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
使其成为生成器,但那是一个不同的蜡球。
【讨论】:
【参考方案3】:看看这个问题: How to return multiple values from *args?
重要的思想是返回值,只要是容器,就可以展开成单独的变量。
【讨论】:
【参考方案4】:但是,根据给定的输入,函数可能会产生多个对,这将导致函数返回 [[a, b], [c, d], [e, f]]。相反,我希望它返回 [a, b], [c, d], [e, f]
你不能只使用返回的列表(即列表 [[a, b], [c, d], [e, f]])并从中提取元素吗?似乎符合您任意数量/多个值的标准。
【讨论】:
您可以使用tuple()
将列表转换为元组。 Python 多值函数实际上返回一个元组,它在赋值时会自动解包。
我最终做了类似这样的事情,基于调用者方法的功能。但是@wenzul 的建议可能更 Pythonic,我可能会重写它以使用更简洁的yield
。谢谢大家!【参考方案5】:
答案很简单,只需通过提供所需的分隔符来连接列表的元素
连接方法的语法:
"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
希望有用
点赞支持一下!
【讨论】:
欢迎堆栈溢出,我认为 OP 正在寻找 python 变量的元组。join
函数的输出是字符串,以后不能使用以上是关于从列表中返回每个元素(Python)的主要内容,如果未能解决你的问题,请参考以下文章