Как добавить элемент в 2D-массив в Python? («представляет таблицу массивов ha sh») - PullRequest
0 голосов
/ 04 марта 2020

Итак, я пытаюсь создать функцию ha sh, которая помещает элемент k в двумерный массив на основе его мода. Для этого примера размер внешнего массива равен 4. Итак, чтобы начать таблицу ha sh, я хочу, чтобы это был двумерный массив с размером внешнего массива, равным 4. Тогда внутри будет 4 пустых массива. внешний массив. Вот так ...

n = 4
A = [[]]* n

То есть [ [], [], [], [] ] Так что, когда я использую функцию ha sh вот так hash(A, 2), она должна вывести это [ [], [], [2], [] ] на основе этого кода ниже ...

def hash(A, k):
    idx = k % 4

    for i in range(len(A)):
        for j in range(len(A[i])):
            if i == idx:
                print(A[i][j])
                A[i][j] = A[i][j].append(k)

Итак, проблема в том, что он выводит это [ [], [], [], [] ], а не это [ [], [], [2], [] ].

Я пытался ...

def hash(A, k):
    idx = k % 4
    A[idx].append(k)

но это только выводит [[2], [2], [2], [2]], что не то, что я хочу.

Как сделать так, чтобы моя функция ha sh выдала мне этот вывод [ [], [], [2], [] ]?

(PS Я знаю, что гораздо лучше просто создать массив связанных списков. делать это для лучшего понимания таблицы ha sh, если они были реализованы с массивами, и для лучшего понимания 2D-массивов.)

1 Ответ

1 голос
/ 04 марта 2020

Второе решение не работает из-за поведения оператора умножения для списков. Когда кто-то пишет A = [[]]*n, все n внутренних списков фактически являются одним и тем же списком (одним и тем же местом в памяти), поэтому изменение одного из них меняет каждый из них. Если вместо этого A создается как A = [[] for _ in range(n)], эти внутренние списки больше не являются тем же объектом, и они будут работать так, как вы предполагали.

Первое решение не работает по нескольким причинам; самым непосредственным является то, что len(A[i]) равно 0 в начале l oop для каждого i, поэтому функция будет пропускать его каждый раз (и никогда не увеличивать).

Даже если вы исправите A[i][j] - это не список, поэтому при вызове .append() вы получите сообщение об ошибке. Списки A[i], и вы захотите добавить к ним.

Мало того, но первое решение связано с той же проблемой, что и второе.

(Источник : https://docs.python.org/3/library/stdtypes.html#common -последовательность операций , примечания 2 и 3)

...