Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

Из Часто задаваемые вопросы по Python:

Списки и кортежи, во многом аналогичные во многом, используются в основном по-разному. Кортежи можно рассматривать как похожие на записи Pascal или C-структуры; это небольшие коллекции связанных данных, которые могут быть разных типов, которые работают как группа. Например, декартова координата представляется в виде кортежа из двух или трех чисел.

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

Обычно по соглашению вы не выбираете список или кортеж только на основе его (im) изменчивости. Вы бы выбрали кортеж для небольших коллекций совершенно разных частей данных, в которых полномасштабный класс был бы слишком тяжелым, и список для коллекций любого разумного размера, где у вас есть однородный набор данных.

Ответ 2

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

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

Ответ 3

Кортежи - это быстрый\гибкий способ создания составных типов данных. Списки - это контейнеры для списков объектов.

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

Каждая деталь учащегося в этом списке может быть 3-мя кортежами, содержащими номер броска, имя и результат теста.

'[(1,'Mark',86),(2,'John',34)...]'

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

Ответ 4

Понятие кортежей очень выразительно:

  • Прагматично, они отлично подходят для упаковки и распаковки значений (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 :'(
    

Ответ 5

[1, 2, 3] - список, в который можно добавлять или удалять элементы.
(1, 2, 3) - кортеж, в котором после определения модификация не может быть выполнена.

Ответ 6

Всякий раз, когда мне нужно передать коллекцию элементов функции, если я хочу, чтобы функция не меняла значения, переданные в - я использую кортежи.

Если я хочу, чтобы функция изменяла значения, я использую список.

Всегда, если вы используете внешние библиотеки и должны передавать список значений функции и не уверены в целостности данных, используйте кортеж.

Ответ 7

Как отмечали другие, списки и кортежи - это оба контейнера, которые можно использовать для хранения объектов python. Списки расширяемы, и их содержимое может меняться по назначению, с другой стороны, кортежи неизменяемы.

Кроме того, списки не могут использоваться как ключи в словаре, а кортежи могут.

Ответ 8

откройте консоль и запустите 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' из методов списка.

Это связано с тем, что кортежи неизменяемы и не поддерживают никаких изменений. Вместо этого они проще и быстрее во внутренней реализации.

Ответ 9

  • Кортеж может представлять собой ключ в словаре, поскольку он неизменны.
  • Используйте списки, если у вас есть коллекция данных, которые не нужен произвольный доступ.

Ответ 10

Если вы можете найти решение, которое работает с кортежами, используйте их, так как это приводит к неизменности, из-за чего вы управляете более функциональным путем. Вы почти никогда не жалеете о том, чтобы спуститься по функциональному/неизменяемому пути.

Ответ 11

[1,2,3] - это список.

(1,2,3) является кортежем и неизменным.

Ответ 12

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

Таким образом, (1,2,3) является кортежем и является неизменным. Любые изменения, которые вы хотите внести, должны перезаписать объект.

[1,2,3] представляет собой список и элементы могут быть добавлены и удалены.

Список имеет больше возможностей, чем кортеж.

Ответ 13

(1,2,3) является кортежем, а [1,2,3] - это список. Кортеж является неизменным объектом, а список изменен.

Ответ 14

(1,2,3) - это кортеж, а [1,2,3] - список. Вы оба из двух представляют последовательности чисел, но обратите внимание, что кортежи неизменяемы, а список - изменяемые объекты Python.

Ответ 15

(1,2,3) Списки -tuple [1,2,3] -list являются изменяемыми, для которых могут выполняться различные операции, тогда как кортежи являются неизменяемыми, которые не могут быть расширены. Мы не можем добавлять, удалять или обновлять любой элемент из кортеж, как только он создан.