2016-08-25 3 views
2

내가 좋아하는 약 100 만 기록을 중첩 된 목록을 가지고 같은 :얻기 특정 인덱스 고유 값은

resultant = ['b', 'z', ...] 

내가 중첩 루프하지만이 시도는 빨리하지, 어떤 도움이 이해할 수있을 것이다!

답변

0

그게 도움이 되겠습니까? 당신은 고유 항목을 원하기 때문에

result = set([inner_list[1] for inner_list in l]) 
+0

하지만 고유해야합니다 .... –

+0

se 내 대답에. – grael

+1

예 ... 합의! –

1

당신은 (때문에 해시 테이블 이리저리 키를 사용하는) 순서와 고유 항목을 유지하고 두 번째 항목을 얻을 수 zip()를 사용하기 위해 collections.OrderedDict.fromkeys()를 사용할 수 있습니다.

colls = zip(my_lists) 
next(colls) 
list(OrderedDict.fromkeys(next(colls))) 

또는 dict.formkeys() 내 발전기 표현 사용 :

list(OrderedDict.fromkeys(i[1] for i in my_lists)) 

데모 :

>>> lst = [['a', 'b', 'c'], ['d', 'b', 'e'], ['f', 'z', 'g']] 
>>> 
>>> list(OrderedDict().fromkeys(sub[1] for sub in lst)) 
['b', 'z'] 
zip() 이후 파이썬 3.x의에서

from collections import OrderedDict 

list(OrderedDict.fromkeys(zip(my_lists)[2])) 

는이 작업을 수행 할 수있는 반복자를 반환

0

두 가지 옵션을 생각해 볼 수 있습니다.

설정 이해 :

res = {x[1] for x in l} 

나는 NumPy와 배열이 너무 배열이 목록을 변환하고 빠를 수 있습니다 배열 함수를 사용하여 빠른 목록 설정/지능형 이상의 일을 생각한다. 여기 : 원래 l의 각 하위 목록의 두 번째 항목으로 구성되어있는 (0부터 계산하기 시작) np.array(l)[:, 1]는 두 번째 열을 2 차원 배열에 목록을 변환하고, :

import numpy as np 

res = np.unique(np.array(l)[:, 1])  

는 설명해 드리죠 마지막으로 np.unique을 사용하여 유일한 값만 가져옵니다.

1

당신은리스트의 목록을 압축을 해제 할 수 있습니다 후 선택 아래와 같이 세트로 두 번째 튜플 : 내 노트북에 이 코드 걸릴 4.05311584473e-06 millseconds,

list(set(zip(*lst)[1])) 

입력 :

lst = [['a', 'b', 'c'], ['d', 'b', 'e'], ['f', 'z', 'g']] 

출력 :

['b', 'z']