假设我有一个函数,它根据函数调用生成X个等长列表。例如,如果在函数调用中有5个单独的字符串,它应该生成5个列表和.zip/join/合并它们为一个。
为了实现这一点,我使用这个模型函数:
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']我通过“删除”每个返回列表项目和删除额外的符号来修复它,但这似乎太粗糙了。
我相信有一种方法可以正确地.zip生成的列表,而不需要在事后理解结果。
有人能帮上忙吗?
发布于 2013-07-21 00:56:48
下面的内容如何:
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]]
https://stackoverflow.com/questions/17764179
复制相似问题