В чем разница между списками, заключенными в квадратные скобки и круглые скобки в 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) .

  • Лучший способ конкатенации списка объектов String?
  • Получить элементы из списка списков
  • Как удалить элемент из списка по индексу в Python?
  • Добавить объект в список в R в амортизированном постоянном времени, O (1)?
  • Итерирование по списку списка в Python
  • В чем разница между List и ArrayList?
  • Удалить элементы из одного списка в другом
  • Как правильно использовать списки в R?
  • mysql проверяет, находятся ли числа в списке, разделенном запятыми
  • Профсоюз для AUBUC
  • Преобразование списка в массив в Java
  • Interesting Posts

    Извлечение пар слов с помощью String.split ()

    Официальные ссылки на значения по умолчанию для одновременных соединений HTTP / 1.1 на сервер?

    Каков наиболее эффективный способ получить индекс iteratorа std :: vector?

    Метод может быть сделан статическим, но должен ли он?

    Как объединить ячейки в jqGrid 4.0

    Функция автоматического удаления специальных символов из имен файлов во время сохранения в MacOS X

    Имеет ли Microsoft Office 2010 контроль над версиями?

    Как изменить эмулятор терминала по умолчанию на Windows (cmd)?

    Как провести тест производительности моего интернет-соединения?

    h: inputText, привязанный к свойству Integer, представляет значение 0 вместо null

    Как работает бесуровневый язык?

    JSON и экранирующие символы

    Поднять событие всякий раз, когда значение свойства изменилось?

    Почему включение аппаратного ускорения в CSS3 замедляет производительность?

    Как мне войти на сайт с помощью WebClient?

    Давайте будем гением компьютера.