python-2.7 .zip多个生成的列表

时间:2013-07-20 16:20:49

标签: python list python-2.7

假设我有一个函数可以根据函数调用生成X个等长列表。例如,如果函数调用中有5个单独的字符串,则应生成5个列表,并将.zip / join / merge合并为一个。

为了实现这个目的,我正在使用这个模型函数:

def FetchData(*args):
   returnlist = []
   for arg in args:
      datalist = generate.list(arg) #obviously not a real method.

      if returnlist == []
          returnlist = datalist 
      else:
          returnlist = map(list, zip(returnlist, datalist))

    return returnlist

如果有0,1或2个参数,这可以正常工作。 然而,如果有更多,事情变得奇怪:

以下是FetchData()获取4个参数时的示例结果:

>>> returnlist[0]
>>> [[['a', 'b'], 'c'], 'd']

但我需要:

>>> ['a','b','c','d']

我通过'strigifying'每个返回列表项并删除额外的符号来修复它,但这似乎太粗糙了。

我确信有一种方法可以正确地.zip生成的列表,而不需要理解后面的结果。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:4)

以下内容如何:

from itertools import chain
def fetch_data(*args):
    return list(chain.from_iterable(zip(*args)))

a = [ [1,2,3], [4,5,6], [7, 8, 9] ]

print fetch_data(*a)
# [1, 4, 7, 2, 5, 8, 3, 6, 9]

或者,return map(list, zip(*args))会给您:[[1, 4, 7], [2, 5, 8], [3, 6, 9]]