Python 在列表列表中查找大于阈值的所有元素和索引

Python 在列表列表中查找大于阈值的所有元素和索引,python,list,Python,List,我有一个列表,如: 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] 当将列表列表作为输入时,是否有类似的方法? 是否还可以获得大于该阈值的元素索引?这是您的意思吗 In [3]: l1 = [[1,2,3],[4,5,6],[7,8,9,10],[11

我有一个列表,如:

  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]
当将列表列表作为输入时,是否有类似的方法? 是否还可以获得大于该阈值的元素索引?

这是您的意思吗

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]
要获取(内部列表的)索引,您可以使用
枚举

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)zip中:

[如果您使用的是Python 2,则不需要
列表
调用]。类似的方法将为您提供外部和内部列表的索引:

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)
这就是你的意思吗

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]
要获取(内部列表的)索引,您可以使用
枚举

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)zip中:

[如果您使用的是Python 2,则不需要
列表
调用]。类似的方法将为您提供外部和内部列表的索引:

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)

确切地还有一种方法可以获取这些值的索引吗?很好,您可以添加第二个
enumerate()
,也可以包含内部列表的索引,也许?完全正确!还有一种方法可以获取这些值的索引吗?很好,您可以添加第二个
enumerate()
,可能还包括内部列表的索引?