2

假设我有一个函数可以根据函数调用生成 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']

我通过“打击”每个退货清单项目并删除额外的符号来修复它,但这似乎太粗糙了。

我确信有一种方法可以正确压缩生成的列表,而无需事后理解结果。

任何人都可以帮忙吗?

4

1 回答 1

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]]

于 2013-07-20T16:56:48.323 回答