从2d列表python中提取满足某些条件的值列表的最佳方法是什么

时间:2018-12-26 17:47:43

标签: python

我有一个二维列表

grid = [[10,13,17],[3,5,1],[13,1,12]]

我想以元组列表的形式获取所有对象的位置

my_list = [[(i,j) for i in list_ if i == 1] for j,list_ in enumerate(grid)]

但是我的输出如下

[[], [(1, 1)], ...]

如何摆脱空白列表和多余的括号?我的预期输出是

[(1, 2), (2, 1)]

3 个答案:

答案 0 :(得分:2)

假设您的预期输出是错误的。


考虑使用numpy

>>> import numpy as np
>>> a = np.array([[10,13,17],[3,5,1],[13,1,12]])                                                                       
>>> [tuple(x) for x in np.argwhere(a == 1)
[(1, 2), (2, 1)]
>>>
>>> a = np.array([[10,13,17],[1,5,1],[13,1,12]])                                                                       
>>> [tuple(x) for x in np.argwhere(a == 1)]                                                                              
[(1, 0), (1, 2), (2, 1)]

或者,Bazingaa提供的list(map(tuple, np.argwhere(a == 1)))达到相同的结果。

答案 1 :(得分:1)

删除子列表的创建并使用nested list comprehension

grid = [[10, 13, 17], [3, 5, 1], [13, 1, 12]]
my_list = [(i, j) for j, list_ in enumerate(grid) for i, val in enumerate(list_) if val == 1]
print(my_list)

输出

[(2, 1), (1, 2)]

答案 2 :(得分:1)

您可以使用列表理解:

grid = [[10,13,17],[3,5,1],[13,1,12]]
results = [(i, b) for b in range(len(grid)) for i, a in enumerate(grid[b]) if a == 1]

输出:

[(2, 1), (1, 2)]