2014-06-06 2 views
-1

다음과 같은 목록이 있습니다.요소의 위치를 ​​기준으로 목록에서 새 목록을 만듭니다.

['US', 20, 'en', 'UK', 21, 'en', 'Fra', 23, 'fr'] 

위와 같은 3 개의 새로운 목록을 만드는 가장 효율적인 방법은 무엇입니까? 하나 (재미) 라인에서

['US', 'UK', 'Fra'] 
[20, 21, 23] 
['en', 'en', 'fr'] 
+2

나는 downvote하지 않았다. 그러나 질문은 아마 가상의 복제물이기 때문에 downvoted되었다. 즉, 질문하는 대신 대답을 제공하기 위해 광범위한 검색이 필요하지 않았을 것이다. – aestrivex

+1

downvotes는 일반적으로 연구 부족의 결과입니다. 너 자신을 시험해보고 그 필요가 너무 느리다 고 결정 했니? – chepner

+0

내가 아는 유일한 방법은 루프를 실행하고 새 목록을 얻는 것입니다. 나는 그것의 facepalm 질문을 짐작한다. 하지만 여전히 ... – richie

답변

1

는 :

>>> l = ['US', 20, 'en', 'UK', 21, 'en', 'Fra', 23, 'fr'] 
>>> lists = [[l[3*i+j] for i in range(0, int(len(l)/3))] for j in range(0, 3)] 
>>> lists 
[['US', 'UK', 'Fra'], [20, 21, 23], ['en', 'en', 'fr']] 

당신은 lists[0], lists[1]lists[2]을해야합니다.

+2

내부 목록'[l [i + j] 범위 (0, len (l), 3)]에있는 i는 더 명확합니다 – njzk2

+0

예! 나는'range' 함수에 대한 세 번째 인수를 알지 못했습니다. – julienc

1

당신은 사용할 수 있습니다 numpy 인쇄

import numpy as np 
DATA = ['US', 20, 'en', 'UK', 21, 'en', 'Fra', 23, 'fr'] 
x= np.array(DATA).reshape(3,len(DATA)/3).T.tolist() 

print x[0] 
print x[1] 
print x[2] 

['US', 'UK', 'Fra'] 
['20', '21', '23'] 
['en', 'en', 'fr'] 
0

이 가장 효율적인 방법이 아니다, 그러나 당신이 꽤 읽을 수 있도록 달성하기 위해 단계를 인수 한 조각을 사용할 수 있습니다 :

>>> l = ['US', 20, 'en', 'UK', 21, 'en', 'Fra', 23, 'fr'] 
>>> l[::3] 
['US', 'UK', 'Fra'] 
>>> l[1::3] 
[20, 21, 23] 
>>> l[2::3] 
['en', 'en', 'fr'] 
+0

또는 요청 된 목록을 실제로 만들려면, [l [:: 3], l [1 :: 3], l [2 :: 3]]' – aestrivex

+0

@aestrivex 질문은 세 가지 목록 기울기. –

+0

죄송합니다. 내가 잘못 생각한 것 같습니다. – aestrivex

2

조각 및 목록 이해가 트릭을 수행해야합니다. 엄격하게 가능한 가장 효율적인 것은 아니지만 간결하고 읽기 쉽습니다.

data = ['US', 20, 'en', 'UK', 21, 'en', 'Fra', 23, 'fr'] 
result = [ data[i::3] for i in range(3) ] 
관련 문제