2013-11-20 3 views
0

이 작업을 수행 할 수있는 함수를 만들려고합니다.목록 목록을 가져 와서 파이썬으로 재정렬하는 방법

>>> rearrange_list([1,2,3],[4,5,6]) 
[[1,4],[2,5],[3,6]] 

지금까지 내가 무엇을

def rearrange_list(my_list): 
    i = 0 
    n = 0 
    new_list = [] 
    for i in range(0, len(my_list[n])): 
     for n in range(0,len(my_list)): 
      new_list += [my_list[n][i]] 
      print(new_list) 
      n += 1 
    return new_list 

하지만이 코드는 내가 그것을 원하는처럼 [1, 4, 2, 5, 3, 6] 대신 목록 목록의 단일 목록을 반환 내가 알아낼 수없는 것 함수가 목록 내의 목록 색인을 기반으로 목록을 출력하도록 만드는 방법 대신

+0

'zip'은 원하는 것을 수행해야합니다. 그것은 당신에게 목록이 아닌 튜플리스트를 제공하지만. – jazzpi

+0

튜플을 목록으로 변경할 수있는 방법이 있습니까? 특별히 명단이 필요합니다. – user3014764

답변

0

사용 zip()는 : 튜플하지 않을 경우

>>> lsts = ([1,2,3], [4,5,6]) 
>>> zip(*lsts) 
[(1, 4), (2, 5), (3, 6)] 

또는 목록에 결과를 매핑 :

map(list, zip([1,2,3], [4,5,6])) # Python 2 
[list(t) for t in zip([1,2,3], [4,5,6])] # Python 2 and 3 

>>> zip([1,2,3], [4,5,6]) 
[(1, 4), (2, 5), (3, 6)] 

하거나, 특정의 버전 변수 인수 귀하의 기능을 대체하기 위해 :

,
def rearrange_list(*my_lists): 
    return [list(t) for t in zip(*my_lists)] 
+0

마지막 비트 https://eval.in/669542에 문제가있는 것 같습니다. 출력이없는 이유는 무엇입니까? – biogeek

+0

@biogeek : 아무 것도 인쇄하지 않기 때문입니다. 'eval.in'은 파이썬 인터프리터 인터프리터가 아니며, 아무 것도 울리지 않습니다. 'print()'호출을 추가하십시오. –

+0

@biogeek : 수정 된 포크 : https://eval.in/669544 –

1

사용과 같이 우편 번호 :

zip(list_a, list_b) 
1

당신은 zip를 사용할 수 있으며, list comprehension :

>>> def rearrange_lists(a, b): 
...  return [list(x) for x in zip(a, b)] 
... 
>>> rearrange_lists([1,2,3], [4,5,6]) 
[[1, 4], [2, 5], [3, 6]] 
>>> 

참고 위의 기능은 두 목록을 처리. 여러 개의 목록을 처리하려는 경우 다음을 사용할 수 있습니다.

>>> def rearrange_lists(*lsts): 
...  return [list(x) for x in zip(*lsts)] 
... 
>>> rearrange_lists([1,2,3], [4,5,6], [7,8,9]) 
[[1, 4, 7], [2, 5, 8], [3, 6, 9]] 
>>> 
+0

정말 고마워! 이것은 완벽하게 해결되었습니다! – user3014764

+0

@icodes가 더 효율적입니까? – agconti

+1

@agconti - 무엇보다 효율적입니까? OP의 현재 코드를 의미한다면, 네, 훨씬 더 효율적입니다. 내장 함수는 커스텀 함수보다 훨씬 빠르게 실행됩니다 (잘 모르겠지만, 필자는 99 %의 시간을 말할 것입니다). 또한, 필자의 솔루션은 for-loops보다 항상 빠른 list comprehension을 사용한다. – iCodez

관련 문제