Кортежі Python

Кортеж tuple представляє послідовність елементів, яка багато в чому схожа на список за тим винятком, що кортеж є незмінним immutable типом. Тому ми не можемо додавати або видаляти елементи в кортежі, змінювати його.

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

user = ("Tom", 23)  
print(user) 

Також для визначення кортежу ми можемо просто перерахувати значення через кому без застосування дужок:

user = "Tom", 23  
print(user)  

Якщо раптом кортеж складається з одного елемента, то після єдиного елемента кортежу необхідно поставити кому:

user = ("Tom",)  

Для створення кортежу зі списку можна передати список у функцію tuple(), яка поверне кортеж:

users_list = ["Tom", "Bob", "Kate"]  
users_tuple = tuple(users_list)  
print(users_tuple) # ("Tom", "Bob", "Kate")

Звернення до елементів в кортежі відбувається також, як і в списку по індексу. Індексація починається також з нуля при отриманні елементів з початку списку і з -1 при отриманні елементів з кінця списку:

users = ("Tom", "Bob", "Sam", "Kate")  
print(users[0]) # Tom  
print(users[2]) # Sam  
print(users[-1]) # Kate     

# отримаємо частину кортежу з 2 елемента по 4  
print(users[1:4]) # ("Bob", "Sam", "Kate") 

Але так як кортеж - незмінний тип (immutable), то ми не зможемо змінити його елементи. Тобто наступний запис працювати не буде:

users[1] = "Tim"  

При необхідності ми можемо розкласти кортеж на окремі змінні:

user = ("Tom", 22, False)  
name, age, isMarried = user  
print(name) # Tom  
print(age) # 22  
print(isMarried) # False 

Особливо зручно використовувати кортежі, коли необхідно повернути з функції відразу кілька значень. Коли функція повертає кілька значень, фактично вона повертає в кортеж:

def get_user():  
    name = "Tom"  
    age = 22  
    is_married = False 
    return name, age, is_married     

user = get_user()  
print(user[0]) # Tom  
print(user[1]) # 22  
print(user[2]) # False

За допомогою вбудованої функції len() можна отримати довжину кортежу:

user = ("Tom", 22, False)  
print(len(user)) # 3  

Перебір кортежів

Для перебору кортежу можна використовувати стандартні цикли for і while. За допомогою циклу for:

user = ("Tom", 22, False)  
for item in user:  
    print(item)  

За допомогою циклу while:

user = ("Tom", 22, False)     

i = 0  
while i < len(user):  
    print(user[i])  
    i += 1  

Як для списку за допомогою виразу елемент in кортеж можна перевірити наявність елемента в кортежі:

user = ("Tom", 22, False)  
name = "Tom"  
if name in user:  
    print ("користувача звати Tom")  

else:  
    print("Користувач має інше ім'я")  

Складні кортежі

Один кортеж може містити інші кортежі у вигляді елементів. Наприклад:

countries = (  
    ("Germany", 80.2, (("Berlin",3.326), ("Hamburg", 1.718))),  
    ("France", 66, (("Paris", 2.2),("Marsel", 1.6)))  
)     

for country in countries:  
    countryName, countryPopulation, cities = country  
    print("\nCountry: {} population: {}".format(countryName, countryPopulation)) 
    for city in cities:  
        cityName, cityPopulation = city  
        print("City: {} population: {}".format(cityName, cityPopulation))  

Тут кортеж countries, який представляє країни, складається з кортежів, кожен з яких-окрема країна.

Вкладені кортежі мають три елементи: назва країни, чисельність її населення і міста. Міста представляють окремий кортеж, де кожне окреме місто-це вкладений кортеж, що містить назву міста і чисельність його населення.