Лучший способ хранения пары значений, которые необходимо часто обновлять в Python?



У меня есть пример использования, в котором мне нужно хранить пару значений в Python, где оба значения нужно будет часто обновлять.



Использую ли я список, кортеж или что-то еще? С одной стороны, список легче обновлять, так как кортежи неизменны, и мне нужно будет создавать новый Кортеж каждый раз, когда я обновляю любое из значений. Однако, поскольку я не буду ничего добавлять к списку, а размер фиксирован на 2, кажется, что кортеж может быть лучшим представлением того, что объект действительно есть.



Любое понимание? Спасибо!

1177   4  

4 ответов:

Сделать парный класс?

class pair(object):
     def __init__(self,first,second):
         self.update(first,second)
     def update(self,first,second):
         self.first = first
         self.second = second

Это уточняет, что это только два объекта, и что обновления приветствуются. Если вам нужна базовая арифметика с другими парами / списками / кортежами, вы можете реализовать это достаточно легко.

Есть несколько способов создать что-то подобное, но я бы остановился на list. Нет причин переоценивать это.

Я не буду ничего добавлять к списку, а размер фиксирован на 2, похоже, что кортеж может быть лучшим представлением того, что на самом деле представляет собой объект.

Нет. Список не нужно менять по размеру. Список может оставаться постоянным размером на протяжении всей вашей программы. И список имеет явное преимущество, что он поддерживает назначение товара.

Вы также можете рассмотреть возможность заглянуть в collections.namedtuple, Если ищете легкое решение для @kabanus. фактически, официальная документация Python namedtuple показывает пример с namedtuple использованием точек:

>>> # Basic example
>>> Point = namedtuple('Point', ['x', 'y'])
>>> p = Point(11, y=22)     # instantiate with positional or keyword arguments
>>> p[0] + p[1]             # indexable like the plain tuple (11, 22)
33
>>> x, y = p                # unpack like a regular tuple
>>> x, y
(11, 22)
>>> p.x + p.y               # fields also accessible by name
33
>>> p                       # readable __repr__ with a name=value style
Point(x=11, y=22)

Если вы заботитесь о производительности и хотите назвать Поля, используйте __slots__:

class datum(object):
    __slots__ = ['x', 'y']

Теперь у вас есть простой, высокопроизводительный, компактный тип, который не требует поиска по словарю для доступа к полю.

Но если вы заботитесь о производительности и не хотите называть поля, вы можете также придерживаться list.

Здесь вполне достаточно списка. Вы не должны сбрасывать его со счетов как возможность только потому, что у вас всегда есть один и тот же объем данных.

Я не считаю, что использование кортежа здесь уместно, потому что 1) обычно вы используете неизменяемые типы для данных, которые не меняются, и ваши данные изменяются. И 2) Если вам нужно обновить одно значение независимо от другого, синтаксис становится излишне многословным. Сравните синтаксис кортежа:
my_pair = (new_first_value, my_pair[1])

К синтаксису списка:

my_pair[0] = new_first_value

Comments

    Ничего не найдено.