Если предположить, что temp_board
не очень неэффективно, 0
, вы можете сделать то, что вы хотите, так:
# First figure out where the array is zero
zindex = numpy.where(temp_board == 0)
# Make a set of tuples out of it
zindex = set(zip(*zindex))
# Make a set of tuples from indices_to_watch too
indices_to_watch = set([(0,1), (1,2)])
# Find the intersection. These are the indices that need to be set
indices_to_set = indices_to_watch & zindex
# Set the value
temp_board[zip(*indices_to_set)] = level
Если вы не можете сделать выше, вот способ, но я не уверен, что это самый Pythonic:
indices_to_watch = [(0,1), (1,2)]
Сначала преобразуйте в массив numpy:
indices_to_watch = numpy.array(indices_to_watch)
Затем сделайте его индексируемым:
index = zip(*indices_to_watch)
Затем проверьте условие:
indices_to_set = numpy.where(temp_board[index] == 0)
Затем выясните фактические индексы для установки:
final_index = zip(*indices_to_watch[indices_to_set])
Наконец, установите значения:
temp_board[final_index] = level