【问题标题】:Unpacking a tuple of lists into two lists将列表元组解压缩成两个列表
【发布时间】:2018-02-22 20:22:05
【问题描述】:

我有一个函数返回两个列表的元组 (EGreturn (["a", "b"], ["c"]))。

我正在尝试将两个返回的列表附加到两个不同的列表中。 我可以这样做:

temp1, temp2 = functionCall()

list1.append(temp1)
list2.append(temp2)

但我正在尝试找到一些没有临时变量的更优雅的解决方案。 我尝试过的一些方法是使用 for 循环和 lambda,但找不到令人满意的解决方案。

我可能缺少一些明显的东西,因为我非常缺乏经验。 有人可以帮我吗?

【问题讨论】:

  • 你可以简单地做list1.append(functionCall()[0])list2.append(functionCall()[1]),因为你的函数已经返回了一个元组。
  • 那你得调用两次函数
  • 临时变量到底有什么问题?
  • 我相信有很多方法可以让这变得更复杂,但使用临时变量绝对是推荐的方法
  • @Animamorta 你不必要地通过使事情复杂化来制造非问题。你已经拥有解包任务的能力了。你所要求的是一种叫做双函子的东西,它大致允许你分别执行两个动作。如果你追求那种美学,你应该用函数式语言编程。

标签: python list return


【解决方案1】:

是否可以更改函数签名并将顶级列表作为参数发送并直接检索最终附加列表?
比如:

functionCall(list1, list2)

【讨论】:

  • 在这种情况下,向左赋值变得不必要了。但是,在python中,如果修改函数的参数是个好主意,这是有争议的。
  • 只有当它们是全局变量时才会变得不必要。
  • @ᴡʜᴀᴄᴋᴀᴍᴀᴅᴏᴏᴅʟᴇ3000 分配是不必要的,因为该函数可以就地修改列表。
【解决方案2】:

编辑:解释和格式化

这个带有list1的+=实际上是一个为你扩展的函数调用

list1 += functionCall()

list2.append(list1.pop())

【讨论】:

  • 您可能想要格式化您的代码并稍微描述一下您的答案
猜你喜欢
  • 2011-11-25
  • 1970-01-01
  • 2020-12-11
  • 2014-08-26
  • 2011-06-17
  • 2014-07-13
  • 2018-08-17
  • 2012-10-10
相关资源
最近更新 更多