>>> x=[1,2]
>>> x[1]
2
>>> x=(1,2)
>>> x[1]
2
Чи обоє вони дійсні? Чи є хтось кращим з якоїсь причини?
>>> 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 "<stdin>", line 1, in <module>
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 "<stdin>", line 1, in <module>
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]
Одна цікава різниця:
lst=[1]
print lst // prints [1]
print type(lst) // prints <type 'list'>
notATuple=(1)
print notATuple // prints 1
print type(notATuple) // prints <type 'int'>
^^ instead of tuple(expected)
Коса повинна бути включена в кортеж, навіть якщо вона містить лише одне значення. наприклад (1,)замість (1).
Вони не списки, вони - список і кортеж. Про кортежі ви можете прочитати в навчальному посібнику Python. Хоча ви можете мутувати списки, це неможливо з кортежами.
In [1]: x = (1, 2)
In [2]: x[0] = 3
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/home/user/<ipython console> in <module>()
TypeError: 'tuple' object does not support item assignment
Інший спосіб, що дужки і дужки відрізняються, полягає в тому, що квадратні дужки можуть описувати розуміння списку, наприклад [x for x in y]
Тоді як відповідний батьківський синтаксис вказує генератор кортежу :(x for x in y)
Ви можете зрозуміти кортеж, використовуючи: tuple(x for x in y)
Дивіться: Чому в Python немає розуміння кортежу?
Перший - список, другий - кортеж. Списки змінні, кортежі - ні.
Перегляньте розділ « Структури даних» підручника та розділ « Типи послідовності» документації.
Елементи, відокремлені комами, додані до (і )є tuples, ті, що додаються до [і ]є lists.
:P
(і )є tuples, ті, що додаються [та ]є lists".
(i for i in ...)та[i for i in ...].