Python - 将多个值从函数返回到不同的数组

时间:2011-12-13 19:27:11

标签: python arrays function

我有一个函数,我返回两个值。我想将这两个值直接放入两个不同的数组中。我知道如何将输出作为两个不同的值返回以便稍后添加到数组中,但我不想拥有临时占位符。示例如下所示。

def two_outputs():
    output_one = 5
    output_two = 6
    return output_one, output_two

one_array = []        # initialize array
two_array = []        # initialize array

a, b = two_outputs()  # get values

one_array.append(a)   # store first value in first array
two_array.append(b)   # store second value in first array

理想情况下,我不想使用a和b,并且必须稍后在代码中附加。我想将函数的输出直接附加到两个数组。这甚至可能吗?

感谢您的帮助。我希望我这样做是正确的,因为这是我的第一篇文章。你们已经对编程问题给了我很多帮助。

更新:我想根据下面的回答,不可能直接这样做。感谢大家的帮助,找到了实现目标的其他方法。

4 个答案:

答案 0 :(得分:5)

如何使用辅助函数?

def zippend(lists, values):
  assert len(lists) == len(values)
  for l,v in zip(lists, values):
    l.append(v)

zippend((one_array, two_array), two_outputs())

函数zippend有两个参数。第一个是List s的可迭代(你所指的“数组”实际上是{python中的List)。第二个是要附加到这些列表的可迭代值。

只要列表数与值的数量匹配(每个列表一个值),就可以使用任意数量的列表和值。

编辑:如果two_outputs()要将List的元组连接到one_arraytwo_array,那么您可以将函数更改为使用{{1}而不是extend

append

或者,如果你真的想要,你可以使用一个if语句来检查它获得了什么样的值,def zextend(lists, values): assert len(lists) == len(values) for l,v in zip(lists, values): l.extend(v) ed或append。{ / p>

答案 1 :(得分:1)

假设我理解正确,您需要在声明函数之前定义数组。

one_array, two_array = [], []

def two_outputs():
    one_array.append(5)
    two_array.append(6)

#call function
two_outputs()

print one_array, two_array
#[5] [6]

答案 2 :(得分:1)

您可以随时更改函数以返回列表元组:

def test():
   # some code
   return [a], [b]

a, b = test()

将在返回时生成a和b列表

答案 3 :(得分:0)

可以使用以下生成器在一行中完成。对“任何”的呼吁就是这样 生成器被消耗,因此它中的表达式被执行。

any(lst.append(item) for lst,item in zip((one_array, two_array), two_outputs()))

NB。我不推荐这种编程风格 - 它越来越难以阅读。 也许,如果它是一个过于频繁的成语,我会写一个简短的帮助函数 作业如下:

def multi_append(lists, multi_function, *args, **kw):
    for lst, result in zip(lists, multi_function(*args, **kw)):
         lst.append(result)

在代码的“正文”上,只需写下:

multi_append((array_one, array_two), two_outputs)

为了完整起见,我添加了一个允许您使用赋值运算符的建议。

在这种情况下需要的是一个自定义List对象,它具有执行追加的属性。创建这样一个类是一个2班轮,但是,他在你的代码中列出的必须来自这个类:

class MList(list):
    last = property(lambda s:s[-1], list.append)

array_one, array_two = MList(), MList()

array_one.last, array_two.last = two_outputs()