Ситуация со списком и кортежем в Python

Есть ли ситуация, когда использование списка приводит к ошибке, и вместо этого вы должны использовать кортеж?

Я кое-что знаю о свойствах как кортежей, так и списков, но недостаточно, чтобы выяснить, ответ на этот вопрос. Если бы вопрос был наоборот, то списки можно корректировать, а кортежи - нет.

8
задан Alphonse 17 February 2010 в 13:17
поделиться

3 ответа

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

d = {(1, 2): 'a', (3, 8, 1): 'b'}  # Valid.
d = {[1, 2]: 'a', [3, 8, 1]: 'b'}  # Error.
14
ответ дан 5 December 2019 в 06:23
поделиться

Из-за своей неизменной природы кортежи (в отличие от списков) хешируемые . Это то, что позволяет кортежам быть ключами в словарях, а также членами наборов. Строго говоря, имеет значение их хэшируемость, а не неизменность.

Таким образом, в дополнение к уже данному ключевому ответу словаря есть еще пара вещей, которые будут работать для кортежей, но не списков:

>>> hash((1, 2))
3713081631934410656

>>> set([(1, 2), (2, 3, 4), (1, 2)])
set([(1, 2), (2, 3, 4)])
9
ответ дан 5 December 2019 в 06:23
поделиться

В форматирование строки кортежи являются обязательными:

"You have %s new %s" % ('5', 'mails') # must be a tuple, not a list!

Использование списка в этом примере приводит к ошибке «недостаточно аргументов для строки формата. ", потому что список рассматривается как один аргумент. Странно, но факт.

3
ответ дан 5 December 2019 в 06:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: