Как мне объявить 2D-массив, каждый элемент которого содержит два значения в python? Кроме того, пожалуйста, сообщите мне, если есть какая-то лучшая структура данных, чтобы сделать это - PullRequest
0 голосов
/ 04 мая 2019

Я хочу объявить N * N 2D массив в Python, где каждый элемент сам является элементом 1 * 2 - текущее значение итерации, ИСТИНА

Для N = 2 матрица 2 * 2 должна выглядеть примерно так -

0,TRUE   1,TRUE  2,TRUE
3,TRUE   4,TRUE  5,TRUE
6,TRUE   7,TRUE  8,TRUE

Я попытался инициализировать 2D-массив, а затем повторил его и установил для каждого значения значение [count, TRUE], но оно не работает.

def some_method(self, N):
     self.N = N
     self.array = [[0 for x in range(self.N)]  for y in range(self.N)]
     self.count = 0
        for i in range(self.N):
            for j in range(0,i+1):
                self.array[i][j] = [self.count, False]
                self.count = self.count + 1

Выход для N = 2-

[[[0, TRUE], 0], [[1, TRUE], [2, TRUE]]]

ТРЕБУЕМЫЙ выход -

[[[0,TRUE],[1,TRUE],[2,TRUE]], [[3,TRUE],[4,TRUE],[5,TRUE]], [[6,TRUE],[7,TRUE],[8,TRUE]]]

Пожалуйста, также дайте мне знать, если есть какой-то лучший способ хранения и доступа к таким данным

1 Ответ

0 голосов
/ 04 мая 2019

Ты слишком обдумываешь это.Это просто выдаст желаемый результат:

self.array = [[[0, True] for x in range(self.N)] for y in range(self.N)]

, который составляет список x, где каждый элемент равен [0, True], а затем создает список y, где каждый элемент x список длин.

Кроме того, ваша итерация также отключена.Когда вы делаете for j in range(0,i+1):, вы итерируете относительно i, который вы также считаете в первую очередь .Если вы хотите нажать на каждый элемент матрицы, то вам нужно выполнить итерацию по осям независимо:

self.array = [[0 for x in range(self.N)]  for y in range(self.N)]
self.count = 0
for i in range(self.N):  # you could also use range(len(self.array)), since the length of self.array will be self.N
    for j in range(self.N):  # you could also use range(len(self.array[i])), since the length of the ith row of self.array will be self.N
        self.array[i][j] = [self.count, False]
        self.count += 1
...