Вывод индексов пустых значений из списков

Есть список:

field = [['a', ' ', ' '], [' ', 'b', ' '], ['c', ' ', ' ']]

Как вытащить с него индексы пустых элементов?

Пример:

free = (((0, 1), (0, 2)), ((1, 0),(1, 2)), ((2, 1), (2, 2))

Ответы (5 шт):

Автор решения: strawdog

Можно, например, так:

import numpy as np
field = [['a', ' ', ' '], [' ', 'b', ' '], ['c', ' ', ' ']]
idx = np.where(np.array(field) ==" ")
res = list(zip(idx[0], idx[1]))

res:

[(0, 1), (0, 2), (1, 0), (1, 2), (2, 1), (2, 2)]
→ Ссылка
Автор решения: Vadim.Sharoikin

можно так

field = [['a', ' ', ' '], [' ', 'b', ' '], ['c', ' ', ' ']]

a = []
for el in field:
    x = [(field.index(el),i) for i, _ in enumerate(el) if _.replace(' ','') == '']
    a.append(tuple(x))


print(tuple(a))

сработает даже если больше чем 1 пробел в строке. если это не надо просто замени

if _.replace(' ','') == ''

на

if _ == ' '
→ Ссылка
Автор решения: CameL

Простое решение через циклы

field = [['a', ' ', ' '], [' ', 'b', ' '], ['c', ' ', ' ']]
free = []
for line in field:
    temp = []
    for num, sumbol in enumerate(line):
        if sumbol == ' ':
            temp.append(num)
    free.append(tuple(temp))
print(tuple(free))  #  ((1, 2), (0, 2), (1, 2))

Чтобы результат получился в круглых скобках, в конце он преобразуется в tuple. Если это не нужно, можно все оставить в списках

→ Ссылка
Автор решения: Dmitry

Просто вкину, как вариант. Логика собирать в итогвый кортеж та же, но подход к поиску оформлен через строку и регулярное выражение. Понятно, что код не универсален и не быстр (регулярки не имеют отношение к быстродействию). Но для расширения методов и практик подойдет

import re

field = [['a', ' ', ' '], [' ', 'b', ' '], ['c', ' ', ' ']]

result = []
for  item in field:
    result.append([m.start() for m in re.finditer(' ', ''.join(item))])

free = tuple((count, value)  for count, r in enumerate(result) for value in r)
→ Ссылка
Автор решения: SergFSM

однострочник:

tuple(tuple((i,x) for x,y in enumerate(j) if y==' ') for i,j in enumerate(field))

>>> out
'''
(((0, 1), (0, 2)), ((1, 0), (1, 2)), ((2, 1), (2, 2)))
→ Ссылка