В чем разница между списками, заключенными в квадратные скобки и круглые скобки в Python?

>>> x=[1,2] >>> x[1] 2 >>> x=(1,2) >>> x[1] 2 

Действительно ли они действительны? Почему-то по какой-то причине?

Квадратные скобки представляют собой списки, а в скобках – кортежи .

Список изменен, что означает, что вы можете изменить его содержимое:

 >>> x = [1,2] >>> x.append(3) >>> x [1, 2, 3] 

в то время как кортежи не являются:

 >>> x = (1,2) >>> x (1, 2) >>> x.append(3) Traceback (most recent call last): File "", line 1, in  AttributeError: 'tuple' object has no attribute 'append' 

Другое главное отличие состоит в том, что кортеж – хешируемый, что означает, что вы можете использовать его как ключ к словарю, между прочим. Например:

 >>> x = (1,2) >>> y = [1,2] >>> z = {} >>> z[x] = 3 >>> z {(1, 2): 3} >>> z[y] = 4 Traceback (most recent call last): File "", line 1, in  TypeError: unhashable type: 'list' 

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

 >>> x = (1,2) >>> x += (3,) >>> x (1, 2, 3) 

Однако это не означает, что кортежи изменяемы . В приведенном выше примере новый кортеж строится путем объединения двух кортежей в качестве аргументов. Исходный кортеж не изменяется. Чтобы продемонстрировать это, рассмотрите следующее:

 >>> x = (1,2) >>> y = x >>> x += (3,) >>> x (1, 2, 3) >>> y (1, 2) 

Принимая во внимание, что если бы вы построили этот же пример со списком, y также будет обновляться:

 >>> x = [1, 2] >>> y = x >>> x += [3] >>> x [1, 2, 3] >>> y [1, 2, 3] 

Они не являются списками, это список и кортеж. Вы можете прочитать о кортежах в учебнике Python. Хотя вы можете мутировать списки, это невозможно с кортежами.

 In [1]: x = (1, 2) In [2]: x[0] = 3 --------------------------------------------------------------------------- TypeError Traceback (most recent call last) /home/user/ in () TypeError: 'tuple' object does not support item assignment 

Первый – это список, второй – кортеж. Списки являются изменяемыми, кортежи – нет.

Взгляните на раздел « Структуры данных » учебника и раздел « Типы последовательностей » документации.

Элементы, разделенные запятыми, заключенные в ( и ) являются tuple s, те, которые заключены в [ и ] являются list s.

Другим способом скобки и круглые скобки отличаются то, что квадратные скобки могут описывать понимание списка, например [x for x in y]

В то время как соответствующий родительский синтаксис задает генератор кортежей: (x for x in y)

Вы можете получить понимание кортежа, используя: tuple(x for x in y)

См .: Почему в Python нет понимания кортежа?

Одно интересное различие, которое стоит заметить, – это когда есть только одно значение.

 lst=[1] print lst // prints [1] print type(lst) // prints  notATuple=(1) print notATuple // prints 1 print type(notATuple) // prints  ^^ instead of tuple(expected) 

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

  • Android listview с проблемой флажка
  • Как бы вы сделали строку, разделенную запятыми, из списка строк?
  • Интеллектуальный способ удаления элементов из списка при перечислении в C #
  • Есть ли что-то вроде общего списка в Cocoa / Objective-C?
  • Как распечатать все элементы списка в Java?
  • Как обрабатывать событие добавления в список?
  • Как отсортировать список в алфавитном порядке с помощью поля «Имя объекта»
  • Как сгладить список в список без принуждения?
  • Как я могу исключить несколько папок с помощью Get-ChildItem -exclude?
  • список по сравнению с lambda + filter
  • Добавить объект в список в R в амортизированном постоянном времени, O (1)?
  • Давайте будем гением компьютера.