изменить одно из значений в 2D массиве? - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь создать связанный список (абстрактный тип данных), и мне нужно заменить один элемент в моем 2D-массиве.

Параметр x - это мои данные, а p - мой указатель. Я не могу понять, как получить индекс одного элемента в списке (третья строка снизу): [('b', 1), ('n', 2)] я пытался использовать .index (1 ), но он не может найти его, потому что мне пришлось бы искать его следующим образом: .index ('b', 1), но как только я добавляю элемент, я не знаю 'b' только число! Мне нужен этот индекс, чтобы заменить одно значение в массиве (которое я тоже не могу заставить работать) (это последняя строка).

class Linked_list():
    def __init__(self):
        self.Linkedlist = [('b',1),('n',2)]
        self.Index = int

    def InsertionE(self,x,p):
            self.Index = self.Linkedlist.index(p)                                                               
            self.Linkedlist[Index].replace(self.Linkedlist[:,len(self.Linkedlist)])

Подводя итог, мой вопрос:

1 как мне найти часть 1 элемента в 2d массиве? и

2, как мне заменить одну часть 1 элемента в 2d массиве?

1 Ответ

0 голосов
/ 24 января 2019

В шкале от 0 до 10 того, насколько грязно вы пытаетесь там, я бы сказал, что это 11. Я бы посоветовал вам взглянуть на методы настройки поиска элементов в модели данных - https://docs.python.org/3/reference/datamodel.html#emulating-container-types

Затем, прочитав некоторую информацию о collection.abc и реализуйте свой класс, наследующий от collections.MutableSequence - если последовательность будет соответствовать вашим потребностям - https://docs.python.org/3/library/collections.abc.html

Тренировка в интерактивной консоли. Когда вы знакомы с ним, взглянуть на рекомендации по стилю кодирования в PEP-8 было бы неплохо - имя класса, например Linked_list, экземпляры которого содержат атрибут с именем LinkedList, заставит глаза большинства Pythonistas кровоточить - что возможно, это причина, по которой никто не позаботился о том, чтобы обратиться к вам. - https://www.python.org/dev/peps/pep-0008/.

Все это говорит о том, что я до сих пор не могу понять, что вы пытаетесь сделать - либо в целом, с помощью "связного списка", либо, в частности, в методе InsertionE.

Само понятие «связанный список» имеет смысл в языках, где нужно вручную управлять расположением объектов в памяти. Объект Pyhton «list», хотя и не является связанным списком, достаточно эффективен, чтобы покрыть большинство случаев использования, которые можно было бы иметь со связанными списками, но для алогритов, которые потребовали бы большого количества вставок в середине списка. Затем можно легко создать структуру данных «связанный список» в Python, реализовав интерфейс «collection.abc.MutableSequence» и имея класс «Node» для хранения ссылок на предыдущие / следующие объекты.

Кроме того, для реальных двумерных типов данных вам, вероятно, будет гораздо лучше использовать внешнюю библиотеку Python. Ничто из того, что вы могли бы реализовать с нуля, не приблизилось бы даже к производительности и надежности этого проекта (если, конечно, у вас нет ресурсов, достаточных для более чем 30-летней оптимизации числовых вычислений)

Все, что сказал, что я все еще могу сказать об этом коде, это то, что метод .index из списков, которые вы пытаетесь использовать, по-видимому, для определения «адреса строки» в вашей структуре данных необходимо точное соответствие - так, он не сможет найти ничего по первому элементу кортежей, содержащихся в списке. Но я действительно не могу понять, что он должен делать по вашему описанию и коду в этом вопросе, чтобы предлагать какие-либо предложения, кроме как "сделать паузу, изучить немного больше языка, начать все сначала". К сожалению.

Но, может быть, в зависимости от того, что вы пытаетесь сделать там, может быть, вам также может пригодиться простой dict - проверьте возможности dict перед тем, как все переделывать, если вы спешите.

...