Во многих местах (1,2,3)
(кортеж) и [1,2,3]
(список) могут использоваться взаимозаменяемо.
Когда я должен использовать один или другой, и почему?
Во многих местах (1,2,3)
(кортеж) и [1,2,3]
(список) могут использоваться взаимозаменяемо.
Когда я должен использовать один или другой, и почему?
Из Часто задаваемые вопросы по Python:
Списки и кортежи, во многом аналогичные во многом, используются в основном по-разному. Кортежи можно рассматривать как похожие на записи Pascal или C-структуры; это небольшие коллекции связанных данных, которые могут быть разных типов, которые работают как группа. Например, декартова координата представляется в виде кортежа из двух или трех чисел.
Списки, с другой стороны, больше похожи на массивы на других языках. Они имеют тенденцию удерживать различное количество объектов, все из которых имеют один и тот же тип и которые работают один за другим.
Обычно по соглашению вы не выбираете список или кортеж только на основе его (im) изменчивости. Вы бы выбрали кортеж для небольших коллекций совершенно разных частей данных, в которых полномасштабный класс был бы слишком тяжелым, и список для коллекций любого разумного размера, где у вас есть однородный набор данных.
Список [1,2,3]
является динамичным и гибким, но эта гибкость достигается за счет скорости.
Кортеж (1,2,3)
является фиксированным (неизменным) и, следовательно, быстрее.
Кортежи - это быстрый\гибкий способ создания составных типов данных. Списки - это контейнеры для списков объектов.
Например, вы могли бы использовать список для хранения списка сведений об ученике в классе.
Каждая деталь учащегося в этом списке может быть 3-мя кортежами, содержащими номер броска, имя и результат теста.
'[(1,'Mark',86),(2,'John',34)...]'
Кроме того, поскольку кортежи являются неизменяемыми, их можно использовать в качестве ключей в словарях.
Понятие кортежей очень выразительно:
Прагматично, они отлично подходят для упаковки и распаковки значений (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)
- кортеж, в котором после определения модификация не может быть выполнена.
Всякий раз, когда мне нужно передать коллекцию элементов функции, если я хочу, чтобы функция не меняла значения, переданные в - я использую кортежи.
Если я хочу, чтобы функция изменяла значения, я использую список.
Всегда, если вы используете внешние библиотеки и должны передавать список значений функции и не уверены в целостности данных, используйте кортеж.
Как отмечали другие, списки и кортежи - это оба контейнера, которые можно использовать для хранения объектов python. Списки расширяемы, и их содержимое может меняться по назначению, с другой стороны, кортежи неизменяемы.
Кроме того, списки не могут использоваться как ключи в словаре, а кортежи могут.
откройте консоль и запустите 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']
Как вы можете видеть, последние в последнем списке строк имеют следующие методы: 'добавить', 'count', 'extend', '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' из методов списка.
Это связано с тем, что кортежи неизменяемы и не поддерживают никаких изменений. Вместо этого они проще и быстрее во внутренней реализации.
Если вы можете найти решение, которое работает с кортежами, используйте их, так как это приводит к неизменности, из-за чего вы управляете более функциональным путем. Вы почти никогда не жалеете о том, чтобы спуститься по функциональному/неизменяемому пути.
[1,2,3]
- это список.
(1,2,3)
является кортежем и неизменным.
(1,2,3) и [1,2,3] могут использоваться взаимозаменяемо в редких условиях.
Таким образом, (1,2,3) является кортежем и является неизменным. Любые изменения, которые вы хотите внести, должны перезаписать объект.
[1,2,3] представляет собой список и элементы могут быть добавлены и удалены.
Список имеет больше возможностей, чем кортеж.
(1,2,3)
является кортежем, а [1,2,3]
- это список. Кортеж является неизменным объектом, а список изменен.
(1,2,3)
- это кортеж, а [1,2,3]
- список. Вы оба из двух представляют последовательности чисел, но обратите внимание, что кортежи неизменяемы, а список - изменяемые объекты Python.
(1,2,3) Списки -tuple [1,2,3] -list являются изменяемыми, для которых могут выполняться различные операции, тогда как кортежи являются неизменяемыми, которые не могут быть расширены. Мы не можем добавлять, удалять или обновлять любой элемент из кортеж, как только он создан.