Сведения о вопросе

Solllo

16:03, 1st July, 2020

Теги

python   list   tuples    

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

Просмотров: 536   Ответов: 15

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

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



  Сведения об ответе

Chhiki

18:03, 1st July, 2020

От Python FAQ :

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

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

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


  Сведения об ответе

ASER

18:03, 1st July, 2020

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

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


  Сведения об ответе

прога

18:03, 1st July, 2020

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

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

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

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

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


  Сведения об ответе

davran

18:03, 1st July, 2020

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

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

  • В сочетании со словарями (hash таблицами) они допускают формы отображения, которые в противном случае потребовали бы много уровней ассоциации. Например, рассмотрим маркировку того,что (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 элементов предсказуемым образом, например, в приведенном выше примере координат.

  • Наконец, списки не являются хэшируемыми, поэтому тип отображения, выполняемый со словарями (таблицы hash в 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 :'(
    


  Сведения об ответе

darknet

18:03, 1st July, 2020

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


  Сведения об ответе

screen

18:03, 1st July, 2020

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

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

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


  Сведения об ответе

DO__IT

18:03, 1st July, 2020

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

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


  Сведения об ответе

ASSembler

18:03, 1st July, 2020

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

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


  Сведения об ответе

appple

18:03, 1st July, 2020

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


  Сведения об ответе

crush

18:03, 1st July, 2020

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


  Сведения об ответе

Chhiki

18:03, 1st July, 2020

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

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


  Сведения об ответе

lesha

18:03, 1st July, 2020

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

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

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

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


  Сведения об ответе

DINO

18:03, 1st July, 2020

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


  Сведения об ответе

LIZA

18:03, 1st July, 2020

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


  Сведения об ответе

darknet

18:03, 1st July, 2020

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться