2013-07-20 5 views
2

함수 호출에 따라 같은 길이의 X리스트를 생성하는 함수가 있다고 가정 해 보겠습니다. 예를 들어 함수 호출에 5 개의 개별 문자열이 있으면 5 개의 목록을 생성하고이를 .zip/join/merge로 묶어야합니다. python-2.7. 다중 생성리스트

내가이 모형 기능을 사용하고이 작업을 수행하려면, 0, 1 또는 2 인자가있는 경우이 잘 작동

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 

. 더가있는 경우 그러나, 상황이 이상한 얻을 :

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

하지만 난이 필요합니다 :

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

내가 고정 그렇다고 FetchData()가 4 개 인수를 얻을 때 여기

은 샘플 결과입니다 그것은 각 반환 목록 항목을 'strigifying'하고 여분의 기호를 제거함으로써,하지만 그건 너무 미숙 한 것 같습니다.

나중에 결과를 이해할 필요없이 생성 된 목록을 올바르게 압축 할 수있는 방법이있을 것입니다.

아무도 도와 줄 수 있습니까?

+0

을 당신이 요구하는지 전혀 모르겠어요,하지만 당신은 쓰기를 시도하는 것 같은 소리가 난다 당신의 자신 : [itertools.chain] (http://docs.python.org/2/library/itertools.html#itertools.chain) (또는 매우 유사한 내용) –

+0

아니요, itertools.izip의 줄을 따라 더 많은 루프에서 작동하지 않으며 나는 여전히 앞서 말한 결과를 얻는다. 요점을 되풀이하기 위해, 나는 목록의 알려지지 않은 금액에서 하나의 압축 목록을 얻으려고합니다. 따라서 루프. – Andy

+1

그래서'[1, 2, 3], [4, 5,6], [7,8,9]'주어진 출력은 무엇입니까? –

답변

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

+0

도움 주셔서 감사합니다. – Andy