我有一个二维列表
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)]
答案 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)]