python list - В чем разница между списками и кортежами?

python tuple to string / python / list / tuples

Каковы преимущества/недостатки кортежей/списков?

Chris_Rands



Answer #1

Это пример списков Python:

my_list = [0,1,2,3,4]
top_rock_list = ["Bohemian Rhapsody","Kashmir","Sweet Emotion", "Fortunate Son"]

Это пример кортежа в Python:

my_tuple = (a,b,c,d,e)
celebrity_tuple = ("John", "Wayne", 90210, "Actor", "Male", "Dead")

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

>>> my_list[0:3]
[0,1,2]
>>> my_tuple[0:3]
[a,b,c]

Сравнение и сортировка - два кортежа или два списка сравниваются по своему первому элементу, а если есть связь, то по второму элементу и так далее. Последующим элементам не уделяется никакого внимания после того, как более ранние элементы показывают разницу.

>>> [0,2,0,0,0,0]>[0,0,0,0,0,500]
True
>>> (0,2,0,0,0,0)>(0,0,0,0,0,500)
True

Мутабельность-Элементы в данном списке мутабельны,элементы в данном кортеже НЕ мутабельны.

# Списки изменяемы:
>>> top_rock_list
['Bohemian Rhapsody', 'Kashmir', 'Sweet Emotion', 'Fortunate Son']
>>> top_rock_list[1]
'Kashmir'
>>> top_rock_list[1] = "Stairway to Heaven"
>>> top_rock_list
['Bohemian Rhapsody', 'Stairway to Heaven', 'Sweet Emotion', 'Fortunate Son']

# Кортежи НЕ изменяемы:
>>> celebrity_tuple
('John', 'Wayne', 90210, 'Actor', 'Male', 'Dead')
>>> celebrity_tuple[5]
'Dead'
>>> celebrity_tuple[5]="Alive"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

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

# Списки НЕ МОГУТ действовать как ключи для хэш-таблиц (словарей)
>>> my_dict = {[a,b,c]:"some value"}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

#Tuples МОЖЕТ действовать как ключи для хэш-таблиц (словарей)
>>> my_dict = {("John","Wayne"): 90210}
>>> my_dict
{('John', 'Wayne'): 90210}