2016-08-23 2 views
0

내가 좋아하는 목록의 목록이 있습니다모든 요소를 ​​찾아 목록의 목록에 임계 값보다 더 큰와 indices

j=[[1,2,3],[4,5,6],[7,8,9,10],[11,12,13,14,15]] 

을 나는 특정 임계 값보다 큰 목록의 목록에서 모든 요소의 목록을 얻으려면 . 나는 목록이있을 때 구문을 알고 있습니다. 구문 :

k=[1,2,3,4,5,6,7] 
k2=[i for i in k if i>5] 
k2=[6,7] 

목록으로 입력 목록을 사용하는 경우에도 비슷한 방법이 있습니까? 요소의 인덱스를 해당 임계 값보다 더 많이 얻을 수 있습니까?

답변

6

이게 무슨 뜻이야?

In [3]: l1 = [[1,2,3],[4,5,6],[7,8,9,10],[11,12,13,14,15]] 
In [4]: [e for l2 in l1 for e in l2 if e>5] 
Out[4]: [6, 7, 8, 9, 10, 11, 12, 13, 14, 15] 

(내부 목록) 인덱스를 얻으려면, 당신은 enumerate 사용할 수 있습니다

In [5]: [(i2, e) for l2 in l1 for i2, e in enumerate(l2) if e>5] 

Out[5]: 
[(2, 6), 
(0, 7), 
(1, 8), 
(2, 9), 
(3, 10), 
(0, 11), 
(1, 12), 
(2, 13), 
(3, 14), 
(4, 15)] 

별도의 목록에서 인덱스를 원하는 경우 (UN) 우편 번호 :

In [6]: list(zip(*[(i2, e) for l2 in l1 for i2, e in enumerate(l2) if e>5])) 

Out[6]: [(2, 0, 1, 2, 3, 0, 1, 2, 3, 4), (6, 7, 8, 9, 10, 11, 12, 13, 14, 15)] 

[Python 2를 사용하는 경우에는 list 호출이 필요 없습니다.] , 압축 해제를

In [7]: [((i1,i2), e) for (i1,l2) in enumerate(l1) for i2, e in enumerate(l2) if e>5] 
Out[7]: 
[((1, 2), 6), 
((2, 0), 7), 
((2, 1), 8), 
((2, 2), 9), 
((2, 3), 10), 
((3, 0), 11), 
((3, 1), 12), 
((3, 2), 13), 
((3, 3), 14), 
((3, 4), 15)] 

또는 : 비슷한 접근 방식은 모두 외부 및 내부 목록으로 당신에게 인덱스를 줄 것이다 정확히

In [8]: idx, items = list(zip(*[((i1,i2), e) for (i1,l2) in enumerate(l1) 
            for i2, e in enumerate(l2) if e>5])) 

In [8]: idx 
Out[8]: 
((1, 2), 
(2, 0), 
(2, 1), 
(2, 2), 
(2, 3), 
(3, 0), 
(3, 1), 
(3, 2), 
(3, 3), 
(3, 4)) 

In [9]: items 
Out[9]: (6, 7, 8, 9, 10, 11, 12, 13, 14, 15) 
+0

! 이러한 가치에 대한 지표를 얻는 방법이 있습니까? –

+0

니스, 두 번째'enumerate()'를 추가하여 내부 목록의 색인을 포함시킬 수도 있습니다. – SiHa

관련 문제