





Список [1,2,3] динамичен и гибок, но за эту гибкость приходится платить за скорость.
Кортеж (1,2,3) является фиксированным (неизменяемым) и, следовательно, быстрее.
Из Python FAQ:
Lists and tuples, while similar in many respects, are generally used in fundamentally different ways. Tuples can be thought of as being similar to Pascal records or C structs; they're small collections of related data which may be of different types which are operated on as a group. For example, a Cartesian coordinate is appropriately represented as a tuple of two or three numbers.
Lists, on the other hand, are more like arrays in other languages. They tend to hold a varying number of objects all of which have the same type and which are operated on one-by-one.
Обычно по соглашению вы не выбираете список или кортеж только на основе их (не) изменчивости. Вы бы выбрали кортеж для небольших коллекций совершенно разных частей данных, в которых полномасштабный класс был бы слишком тяжелым, и список для коллекций любого разумного размера, где у вас есть однородный набор данных.
Кортежи - это быстрый \ гибкий способ создания типов данных составной. Списки - это контейнеры для списков объектов.
Например, вы могли бы использовать список для хранения списка сведений об учениках в классе.
Каждая деталь ученика в этом списке может быть трехкортежной, содержащей их номер списка, имя и результат теста.
`[(1,'Mark',86),(2,'John',34)...]`
Кроме того, поскольку кортежи неизменяемы, их можно использовать в качестве ключей в словарях.
С тонкой оговоркой, что кортеж должен содержать только другие неизменяемые объекты, чтобы считаться хешируемым, например: ([], 3) не хешируется; ("hi", 3) можно хэшировать; ( ([], 3), 3) не хэшируется; ( ((), 3), 3) можно хэшировать.
Как уже упоминалось, списки и кортежи являются контейнерами, которые можно использовать для хранения объектов Python. Списки расширяемы, и их содержимое может изменяться путем присвоения, с другой стороны, кортежи неизменяемы.
Кроме того, списки не могут использоваться в качестве ключей в словаре, тогда как кортежи могут.
Если вы можете найти решение, которое работает с кортежами, используйте их, так как это вызывает неизменяемость, которая толкает вас по более функциональному пути. Вы почти никогда не пожалеете о том, что выбрали функциональный / неизменный путь.
Всякий раз, когда мне нужно передать набор элементов в функцию, если я хочу, чтобы функция не изменяла переданные значения, я использую кортежи.
В противном случае, если я хочу иметь функцию для изменения значений, я использую список.
Всегда, если вы используете внешние библиотеки и вам нужно передать список значений функции и вы не уверены в целостности данных, используйте кортеж.
Понятие кортежей очень выразительно:
С прагматической точки зрения они отлично подходят для упаковки и распаковки ценностей (x,y=coord).
В сочетании со словарями (хеш-таблицами) они допускают формы сопоставления, которые в противном случае потребовали бы многоуровневой связи. Например, отметьте, что (x, y) найдено.
// PHP
if (!isset($found[$x])) {
$found[$x] = Array();
$found[$x][$y] = true;
} else if (!isset($found[$x][$y])) {
$found[$x][$y] = true;
}
# Python
found[(x,y)] = True # parens added for clarity
Списки следует использовать с ожиданием операций с их содержимым (отсюда и различные упоминания неизменяемости). Кто-то захочет выталкивать, нажимать, сращивать, разрезать, искать, вставлять до, вставлять после и т. д. Со списком.
Кортежи должны представлять собой низкоуровневое представление объекта, в котором выполняются простые сравнения или операции, такие как извлечение n-го элемента или n элементов предсказуемым образом, например, в примере с координатами, приведенном ранее.
Наконец, списки не хэшируемы, поэтому тип сопоставления со словарями (хеш-таблицы в Perl, ассоциативные массивы в PHP) должен выполняться с помощью кортежей.
Вот простой пример кортежей и словарей, наконец, вместе:
"""
couple is a tuple of two people
doesLike is a dictionary mapping couples to True or False
"""
couple = "john", "jane"
doesLike = dict()
doesLike[couple] = True
doesLike["jane", "john"] = False # unrequited love :'(
[1, 2, 3] - это список, в котором можно добавлять или удалять элементы.
(1, 2, 3) - это кортеж, в котором после определения изменить нельзя.
[1,2,3] - это список.
(1,2,3) - это кортеж, неизменяемый.
откройте консоль и запустите python. Попробуй это:
>>> list = [1, 2, 3]
>>> dir(list)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delsli
ce__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getit
em__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__',
'__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__r
educe__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__'
, '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__',
'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
Как вы можете видеть, последняя в последней строке списка имеет следующие методы: 'append', 'count', 'extension', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'
Теперь попробуйте то же самое для кортежа:
>>> tuple = (1, 2, 3)
>>> dir(tuple)
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__
format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__get
slice__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__
lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__'
, '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
Здесь появляется только 'count' и 'index' из методов списка.
Это потому, что кортежи неизменяемы и не поддерживают никаких изменений. Вместо этого они проще и быстрее во внутренней реализации.
На Python 3: sorted(x for x in set(dir(list)).difference(dir(tuple)) if not x.startswith('_')) >>> ['append', 'clear', 'copy', 'extend', 'insert', 'pop', 'remove', 'reverse', 'sort']
(1,2,3) - это кортеж, а [1,2,3] - это список. Кортеж - это неизменяемый объект, а список - изменяемый.
(1,2,3) - это кортеж, а [1,2,3] - это список. Любой из них представляет собой последовательность чисел, но обратите внимание, что кортежи неизменяемы, а список - это изменяемые объекты Python.
(1,2,3) и [1,2,3] могут использоваться взаимозаменяемо в редких случаях.
Итак, (1,2,3) является кортежем и неизменен. Любые изменения, которые вы хотите внести, должны перезаписать объект.
[1,2,3] - это список, в который можно добавлять и удалять элементы.
Список имеет больше возможностей, чем кортеж.
(1,2,3) -набор [1,2,3] -лист списки являются изменяемыми, с которыми могут выполняться различные операции, тогда как кортежи неизменяемы и не могут быть расширены. мы не можем добавлять, удалять или обновлять какой-либо элемент из кортежа после его создания.
a = (1,2,3) - это неизменяемый кортеж, что означает, что вы не можете ничего добавить в b = [1,2,3] - это список в Python, который является неизменяемым, что означает, что вы можете вносить изменения в 'b' либо удалять, либо добавлять в него числа.
Проще говоря, списки изменяемы, а кортежи - нет. Следовательно, если вы хотите изменить элементы в своей программе, то есть добавить, удалить или изменить элементы, выберите список. Но, если вы не хотите, чтобы tat происходил, т.е. может быть для установки последовательности в цикле for и т.д., перейдите к кортежу
для каких операций кортеж выполняется быстрее? индексация?