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

голоса
44

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

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

Задан 05/08/2008 в 08:18
источник пользователем
На других языках...                            


14 ответов

голоса
31

Из FAQ Python :

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

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

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

Ответил 05/08/2008 d 14:22
источник пользователем

голоса
19

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

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

Ответил 05/08/2008 d 08:27
источник пользователем

голоса
11

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

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

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

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

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

Ответил 07/08/2008 d 12:21
источник пользователем

голоса
7

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

  • С практической точки зрения, они прекрасно подходят для упаковки и распаковки значений ( x,y=coord).

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

    // 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-й элемент или элементы в п предсказуемым образом, такие, как, например координаты заданной ранее.

  • И, наконец, списки не hashable, поэтому тип отображения сделано со словарями (хэш-таблицей в 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 :'(
    
Ответил 15/08/2008 d 19:00
источник пользователем

голоса
4

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

Ответил 25/06/2011 d 12:14
источник пользователем

голоса
3

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

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

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

Ответил 15/08/2008 d 17:38
источник пользователем

голоса
2
  • Кортеж может представлять собой ключ в словаре, потому что неизменен.
  • Используйте списки, если у вас есть набор данных, который не требует произвольного доступа.
Ответил 20/05/2017 d 07:30
источник пользователем

голоса
2

открыть консоль и запустить питон. Попробуй это:

  >>> 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», «счетчик», «простираться», «индекс», «вставить», «поп», «удалить», «обратный», «сортировки '

Теперь попробуйте то же самое для кортежа:

>>> 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']

Только «граф» и «индекс» из методов списка появляется здесь.

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

Ответил 10/10/2015 d 19:30
источник пользователем

голоса
2

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

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

Ответил 08/08/2008 d 07:06
источник пользователем

голоса
1

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

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

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

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

Ответил 31/03/2018 d 09:14
источник пользователем

голоса
1

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

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

Ответил 08/10/2014 d 07:02
источник пользователем

голоса
1

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

Ответил 08/08/2008 d 07:48
источник пользователем

голоса
0

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

Ответил 27/06/2016 d 20:48
источник пользователем

голоса
0

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

Ответил 19/02/2016 d 02:15
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more