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

StackOverflow https://stackoverflow.com/questions/1983

  •  08-06-2019
  •  | 
  •  

Вопрос

Во многих местах, (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) это кортеж, в котором после определения модификация не может быть выполнена.

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

В противном случае, если я хочу иметь функцию для изменения значений, я использую list .

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

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

Как вы можете видеть, в списке "Последний в последней строке" есть следующие методы:"добавить", "подсчитать", "расширить", "проиндексировать", "вставить", "всплыть", "удалить", "обратить вспять", "отсортировать"

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

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

Только "количество" и "индекс" здесь отображается список методов из списка.

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

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

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

[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) -кортеж [1,2,3]-список списки изменяемы, с которыми могут выполняться различные операции, тогда как кортежи неизменяемы, которые нельзя расширить.мы не можем добавлять, удалять или обновлять какой-либо элемент из кортежа после его создания.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top