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

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

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

  • Python не подлежит подписке
  • Когда Django просматривает первичный ключ внешних ключей?
  • 3D-расчет расстояний с GeoDjango
  • Python читает из аргументов командной строки или stdin
  • Как выбрать окно из массива numpy с периодическими граничными условиями?
  • zlib.error: Ошибка -3 при распаковке: неправильная проверка заголовка
  • Производный массив в python?
  • python открывает текстовый файл с пробелом между каждым символом
  • 14 Solutions collect form web for “Python: в чем разница между (1,2,3) и , и когда я должен использовать их?”

    Из Python FAQ :

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

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

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

    [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', '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] – это список.

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

     def returnNameAndLastName(wholeName): """ @param wholeName: string in the format Name LastName """ data = wholeName.split() name = data[0] lastName = data[1] return (name, lastName) # parenthesis are optional here 

    вы можете хранить в переменной весь кортеж или в двух независимых переменных содержимое кортежа. myTuple = wholeName("Sam Smith") или name, lastName = wholeName("Sam Smith") . Другое приложение для кортежей использует их как ключи словарей, потому что, как упоминалось, они не изменяемы. Таким образом, это способ гарантировать, что ключ не будет изменен. Не обязательно, чтобы все элементы кортежа имели один и тот же тип. (1, 'Hello', ('version', 2.5), [1, 2, 3]) вполне справедливо. Как показано, кортеж может быть элементом кортежа, а список также может быть элементом кортежа.

    С другой стороны, список – это изменяемый тип данных, который означает, что его содержимое может быть изменено после его создания. Список похож на массив, но, более конкретно, он похож на список массивов, потому что массив имеет фиксированный размер, который нельзя изменить, в то время как список имеет переменный размер в зависимости от количества содержащихся в нем элементов. Хотя списки используются для хранения связанных данных, поскольку Python не является строго типизированным языком программирования, возможно иметь список, в котором элементы имеют разные типы, такие как [1, "Goodbye", [1, 'music'], (1, 2, 3)] . Как показано, список может быть элементом списка, а кортеж также может быть элементом списка.

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

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

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