【问题标题】:Python function return 2 listsPython函数返回2个列表
【发布时间】:2013-10-22 12:33:52
【问题描述】:

我有一个创建两个列表的函数。我希望函数将两个列表返回为[], []

这里是代码。这将返回一个类似于 [[], []] 的列表,关闭但仍然不是我想要的。

def create_xy_lst(start, length, step, up, down):
    new_list = []
    new_list.append(create_x_lst(start, length, step))
    new_list.append(create_y_lst(start, length, up, down))
    return new_list

然后我尝试了另一种方法。这将返回 ([], []),它是一个元组。

def create_xy_lst(start, length, step, up, down):

    x = (create_x_lst(start, length, step))
    y = (create_y_lst(start, length, up, down))
    return x, y

如何让函数返回[], []

Python 2.7

【问题讨论】:

  • 那么,这有什么问题呢?也许你可以告诉我们,你到底想做什么。
  • 将两个列表返回为[],[] 返回tuple。你不能从一个函数中返回两个东西。
  • 你不能让一个函数返回两个东西。 tuple 尽可能接近。
  • @thefourtheye 我想在另一个函数中使用输出
  • 所以调用函数时使用元组解包。 x, y = create_xy_lst(args)

标签: python list function python-2.7 tuples


【解决方案1】:

[], []是一个元组

>>> [], []
([], [])

逗号使值成为元组,而不是括号。

返回x, y是返回多个值的正确方法。

您可以将元组解包为多个变量:

x, y = [], []

这也适用于函数返回值:

x, y = create_xy_lst(...)

在作业中解包不仅限于元组;它适用于任何序列:

char1, char2, char3 = 'foo'

【讨论】:

  • x, y = create_xy_lst(...) ------- 这会使 x 和 y 成为同一个列表吗?
  • 仅当您两次返回同一个列表时。
  • @user320: 不,Python 期望右边产生正好两个值的序列。然后它将这些值分配给左侧的名称,从左到右,一个值对应一个名称。
  • @user320:如果你的函数返回一个包含两个列表的元组,xy 将分别从该元组中分配一个列表。
  • @MartijnPieters 我非常喜欢 Python3 的拆包 :)
【解决方案2】:

您的第二次尝试(大部分)是正确的方法(您只是不需要在函数调用周围加上括号)。

我猜你正在检索你的结果是这样的:

foo = create_xy_list(...)

试试这个:

foo, bar = create_xy_list(...)

【讨论】:

    【解决方案3】:

    [], [] 是一个元组。 () 那里的语法很简单,我来演示一下:

    >>> hello = 1,
    >>> hello
    (1,)
    >>> cheese = [1,2,3], [6,7,8]
    >>> cheese
    ([1, 2, 3], [6, 7, 8])
    

    如您所见,, 是元组的组成部分。

    你可以像这样解压它们:

    >>> a, b = [1,2], [3,4]
    >>> a
    >>> [1,2]
    >>> b
    >>> [3,4]
    

    所以,在你的函数中:

    x, y = create_xy_lst(start, length, step, up, down)
    

    如果元组中有多个列表,这也是一个巧妙的技巧(如果您使用的是 Python 3):

    >>> a, *b = [2], [4,5,6], [10]
    >>> a
    >>> [2]
    >>> b
    >>> ([4,5,6], [10])
    

    但是,如果您只想返回一个list,您可以这样做:

    return x + y
    

    【讨论】:

    • 我正在使用 python 2.7 - 应该把它放在问题中。
    【解决方案4】:
    def returnNumbers():
        return 1, 2
    
    first, second = returnNumbers()
    print first, second
    

    它会打印出来

    1 2
    

    您可以简单地返回一个元组并解压缩示例中所示的值。

    你甚至可以像这样检查函数返回的数据类型

    print type(returnNumbers())
    

    它会打印出来

    <type 'tuple'>
    

    【讨论】:

      【解决方案5】:

      您正在询问一个元组,但您拒绝它应该是一个元组的想法,所以这是另一个想法。你可以把它变成一个发电机。

      def create_xy_lst(start, length, step, up, down):
      
          yield create_x_lst(start, length, step))
          yield create_y_lst(start, length, up, down))
      

      每个查询只会产生 1 个列表。

      val = create_xy_lst(a,b,c,d,e)
      print(val.next()) #first list
      print(val.next()) #second list
      

      或者你可以遍历它

      for val in create_xy_lst(a,b,c,d,e):
          print(val)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-21
        • 1970-01-01
        • 2017-07-22
        相关资源
        最近更新 更多