Python: в чем разница между (1,2,3) и [1,2,3] и когда я должен использовать каждый?

Во многих случаях (1,2,3) (кортеж) и [1,2,3] (список) могут использоваться как взаимозаменяемые.

Когда я должен использовать тот или иной и почему?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
52
0
7 776
17
Перейти к ответу Данный вопрос помечен как решенный

Ответы 17

Список [1,2,3] динамичен и гибок, но за эту гибкость приходится платить за скорость.

Кортеж (1,2,3) является фиксированным (неизменяемым) и, следовательно, быстрее.

для каких операций кортеж выполняется быстрее? индексация?

rafak 18.04.2011 16:33
Ответ принят как подходящий

Из 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) можно хэшировать.

Jegschemesch 23.08.2008 08:41

Как уже упоминалось, списки и кортежи являются контейнерами, которые можно использовать для хранения объектов 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']

Chris_Rands 25.09.2018 15:12

(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 и т.д., перейдите к кортежу

Другие вопросы по теме