2016-08-23 29 views
0

我有這樣一個列表的列表:找到所有元素和指標大於閾值的列表清單

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

相關問題