Member 14068174 Ответов: 1

Мне нужна ваша помощь в понимании этого фрагмента кода?


Эй, я просто искал класс для построения массива и настройки его с помощью элементов.И я нашел конструктор массива , но есть несколько строк кода,которые я сделал,НТ понимаю, поэтому я ищу кого-то, кто может объяснить мне, что происходит в этом коде, и что он делает, и почему эта строка кода написана там.Я напишу "заставь меня понять" перед той кодовой линией,которую я не понимаю,так что давай начнем...


импорт под

класс DynamicArray(объект):
'''
Класс динамического массива (аналогично списку Python)
'''

деф __инит__(самостоятельная):
self.n = 0 # подсчет фактических элементов (по умолчанию 0)
self.capacity = 1 # Емкость по умолчанию
сам.А = собственн.make_array(самовыдвижение.емкость)

деф __лен__(самовыдвижение):
"""
Возвращает количество элементов в отсортированный массив
"""
вернуться самостоятельно.Н

def __getitem__(self,k):
"""
Возвращаемый элемент с индексом k
"""
если не 0 <= k <self.n:
return IndexError('K is out of bounds!') # Проверьте, что индекс k находится в границах массива

вернуться самостоятельно.A[k] #извлечение из массива по индексу k

четкости добавить(сам, эле):
"""
Добавить элемент в конец массива
"""
в случае самостоятельной.н == собственн.емкость:
self._resize(2*self.capacity) #двойная емкость, если не хватает места

"Заставь меня понять" себя.В[собственной личности.Н] = эле #установить самостоятельно.показатель N для элемента
"Заставь меня понять" себя.n += 1

деф _resize(самовыдвижение,new_cap):
"""
Измените размер внутреннего массива до емкости new_cap
"""

Б = собственн.make_array(new_cap) # Новый больший массив

для k в диапазоне(self.n): # ссылка на все существующие значения
B[k] = самость.А[к]

"Заставь меня понять" себя.A = B # вызовите новый больший массив
"Заставь меня понять" self.capacity = new_cap # сброс емкости

деф make_array(самовыдвижение,new_cap):
"""
Возвращает новый массив с емкостью new_cap
"""
"Дай мне понять" возвращение (new_cap * под.py_object)()

Что я уже пробовал:

Хотя я впервые пришел сюда, потому что надеюсь, что здесь есть несколько хороших людей, которые могут стать моим наставником по кодированию..

1 Ответов

Рейтинг:
1

Richard MacCutchan

def append(self, ele):
    """
    Add element to end of the array
    """
    if self.n == self.capacity:
    self._resize(2*self.capacity) #Double capacity if not enough room
    
    self.A[self.n] = ele #Set self.n index to element --> 1
    self.n += 1          #                            --> 2

1. Объект parameter ele будет храниться в массиве A при смещении n. Если значение n больше, чем число элементов A-1 тогда будет создано исключение.
2. Значение n увеличивается на 1, чтобы указать на следующий свободный элемент в массиве A.

B = self.make_array(new_cap) # New bigger array

for k in range(self.n): # Reference all existing values
B[k] = self.A[k]

self.A = B # Call A the new bigger array      --> 1
self.capacity = new_cap # Reset the capacity  --> 2

def make_array(self,new_cap):
    """
    Returns a new array with new_cap capacity
    """
    return (new_cap * ctypes.py_object)() #   --> 3

1. Установите ссылку A чтобы указать на вновь созданный массив B Таким образом, все ссылки будут обращаться к данным в новом массиве.
2. Установите переменную capacity к значению параметра new_cap Это просто замена одного значения в переменной на другое (аналогично i = 5).
3. Метод make_array это создание нового необработанного массива, который может вместить до new_cap ctypes.py_object объекты. Ссылка на массив затем передается обратно вызывающему методу, как указано в строках 1 и 2.

Смотреть также Учебник по Python — документация по Python 3.7.2[^].