Как из списка сделать кортеж в python
Перейти к содержимому

Как из списка сделать кортеж в python

  • автор:

Python список кортежей, получить второй элемент каждого кортежа

Бинго!
Однако похоже лучше воспользоваться словарем в вашем случае. И вероятно — с самого начала )) по смыслу данных. Но вам виднее.
Вот такой вариант с преобразованием в словарь:

d=dict(a) print(*list(d.values())) 

Отслеживать
76.9k 6 6 золотых знаков 56 56 серебряных знаков 123 123 бронзовых знака
ответ дан 19 окт 2018 в 18:11
Vasyl Kolomiets Vasyl Kolomiets
4,070 5 5 золотых знаков 26 26 серебряных знаков 49 49 бронзовых знаков

Если среди элементов с индексом 0 найдутся одинаковые значения — фигня получится, а в остальном со словарем решение идеально (ИМХО)

19 окт 2018 в 20:24

Через comprehension и без лишних преобразований в словарь:

lst = [('Магазин', 'railway_fork'), ('Игры', 'games'), ('Информация о боте', 'menu_item'), ('Пополнить счет', 'info')] print([y for x, y, *z in lst]) 
['railway_fork', 'games', 'menu_item', 'info'] 

Отслеживать
ответ дан 19 окт 2018 в 18:17
25.4k 4 4 золотых знака 20 20 серебряных знаков 36 36 бронзовых знаков
А *z зачем нужен? Если x не используется, лучше на _ подменить: [y for _, y in lst]
19 окт 2018 в 19:19

@gil9red а *z — на случай, если в кортежах более двух элементов, как тут уже было отмечено. Что касается замены x на _, то это же абсолютно не существенно.

19 окт 2018 в 19:58

как тут уже было отмечено , кем отмечено? Автор ничего такого не говорил, это уже вы перестраховываетесь 🙂

20 окт 2018 в 4:57

Можно через zip

lst = [('Магазин', 'railway_fork'), ('Игры', 'games'), ('Информация о боте', 'menu_item'), ('Пополнить счет', 'info')] print([(item,) for item in list(zip(*lst))[1]]) # [('railway_fork',), ('games',), ('menu_item',), ('info',)] print(*[item for item in list(zip(*lst))[1]]) # railway_fork games menu_item info print([item for item in list(zip(*lst))[1]]) # ['railway_fork', 'games', 'menu_item', 'info'] 
print([lst[i][1] for i in range(len(lst))]) # ['railway_fork', 'games', 'menu_item', 'info'] 

Кортежи в Python

Кортеж в Python похож на список. Только в отличие от списка кортеж — неизменяемый, то есть менять его элементы после создания нельзя.

Как создать кортеж

Чтобы создать кортеж, нужно поместить все элементы, разделенные запятыми, в круглые скобки () . Скобки не обязательны, но рекомендуем их использовать.

Кортеж может иметь любое количество элементов разных типов (целые числа, числа с плавающей точкой, списки, строки и т. д).

# Разные типы кортежей # Пустой кортеж my_tuple = () print(my_tuple) # Кортеж с целыми числами my_tuple = (1, 2, 3) print(my_tuple) # Кортеж с разными типами данных my_tuple = (1, "Привет", 3.4) print(my_tuple) # Вложенный кортеж my_tuple = ("мышь", [8, 4, 6], (1, 2, 3)) print(my_tuple)

Вывод:

()
(1, 2, 3)
(1, 'Привет', 3.4)
('мышь', [8, 4, 6], (1, 2, 3))

Кортеж можно создать и без использования скобок. Это называется упаковкой кортежа.

# упаковываем кортеж my_tuple = 3, 4.6, "собака" print(my_tuple) # точно так же можно распаковать кортеж a, b, c = my_tuple print(a) # 3 print(b) # 4.6 print(c) # собака

Вывод:

(3, 4.6, 'собака')
3
4.6
собака

Если нужно создать кортеж с одним элементом, все немного сложнее. Дело в том, что одного элемента в круглых скобках недостаточно. Понадобится добавить в конец запятую — иначе Python не поймет, что это кортеж.

my_tuple = ("привет") print(type(my_tuple)) # # Создаем кортеж с одним элементом my_tuple = ("привет",) print(type(my_tuple)) # # Можно и без скобок my_tuple = "привет", print(type(my_tuple)) #

Вывод:

Как получить элемент кортежа

1. По индексу

Мы можем использовать оператор индекса [] , чтобы получить доступ к элементу кортежа.

Примечание. Обратите внимание, что индексирование кортежа начинается с 0. То есть первый элемент кортежа имеет индекс 0.

Кортеж из 9 элементов будет иметь индексы от 0 до 8. Попытка получить доступ к индексу за пределами диапазона индексов кортежа (в нашем случае 9, 10 и т. д.) приведет к ошибке IndexeError.

Индекс должен быть целым числом, поэтому мы не можем использовать float или другие типы в качестве индекса. Это приведет к ошибке TypeError.

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

my_tuple = ('c', 'o', 'd', 'e', 'c', 'h', 'i', 'c', 'k') print(my_tuple[0]) # 'c' print(my_tuple[5]) # 'h' # Вызов print(my_tuple[9]) приведет к ошибке # IndexError: list index out of range # Вызов my_tuple[2.0] приведет к ошибке # TypeError: list indices must be integers, not float # Индекс должен быть целым числом # вложенный кортеж n_tuple = ("мышь", [8, 4, 6], (1, 2, 3)) # вложенное индексирование print(n_tuple[0][3]) # 'ь' print(n_tuple[1][1]) # 4

Вывод:

c
h
ь
4
2. По отрицательному индексу

Python допускает отрицательную индексацию коллекций (наборов значений). Она работает и с кортежами.

Индекс -1 отсылает к последнему элементу, -2 — ко второму элементу с конца и так далее.

my_tuple = ('c', 'o', 'd', 'e', 'c', 'h', 'i', 'c', 'k') # Вывод: 'k' print(my_tuple[-1]) # Вывод: 'c' print(my_tuple[-9])

Вывод:

3. С помощью срезов

Получить доступ к диапазону элементов в кортеже можно с помощью оператора срезов : .

Использование срезов еще называют слайсингом, от английского slicing — «нарезка».

my_tuple = ('c', 'o', 'd', 'e', 'c', 'h', 'i', 'c', 'k') # элементы со 2 по 4 # Вывод: ('o', 'd', 'e') print(my_tuple[1:4]) # элементы от начала и до второго элемента # Вывод: ('c', 'o') print(my_tuple[:-7]) # два последних элемента # Вывод: ('c', 'k') print(my_tuple[7:]) # все элементы от начала до конца # Вывод: ('c', 'o', 'd', 'e', 'c', 'h', 'i', 'c', 'k') print(my_tuple[:])

Вывод:

('o', 'd', 'e')
('c', 'o')
('c', 'k')
('c', 'o', 'd', 'e', 'c', 'h', 'i', 'c', 'k')

Как изменить кортеж

Никак. В отличие от списков, кортежи неизменяемы. Это значит, что элементы кортежа нельзя изменять после добавления в кортеж. Однако если элемент сам по себе является изменяемым типом данных (например, списком), его вложенные элементы менять уже можно.

Переназначить кортеж тоже можно.

my_tuple = (4, 2, 3, [6, 5]) # my_tuple[1] = 9 # Эта строка приведет к ошибке # TypeError: 'tuple' object does not support item assignment # Значения изменяемого элемента менять можно my_tuple[3][0] = 9 # Вывод: (4, 2, 3, [9, 5]) print(my_tuple) # Можно переназначить кортеж my_tuple = ('c', 'o', 'd', 'e', 'c', 'h', 'i', 'c', 'k') # Вывод: ('c', 'o', 'd', 'e', 'c', 'h', 'i', 'c', 'k') print(my_tuple)

Вывод:

(4, 2, 3, [9, 5])
('c', 'o', 'd', 'e', 'c', 'h', 'i', 'c', 'k')

В Python кортежи можно объединить с помощью оператора + . Это называется конкатенацией.

С помощью оператора * можно повторить элементы в кортеже заданное количество раз.

Оба оператора + и * приводят к созданию нового кортежа.

# Конкатенация #Вывод: (1, 2, 3, 4, 5, 6) print((1, 2, 3) + (4, 5, 6)) # Повторение # Вывод: ('Повторить', 'Повторить', 'Повторить') print(("Повторить",) * 3)

Вывод:

(1, 2, 3, 4, 5, 6)
('Повторить', 'Повторить', 'Повторить')

Как удалить кортеж

Изменять элементы кортежа нельзя. Это значит, что удалять их тоже нельзя.

В Python можно только полностью удалить кортеж — с помощью ключевого слова del .

my_tuple = ('c', 'o', 'd', 'e', 'c', 'h', 'i', 'c', 'k') # нельзя удалить элементы кортежа # TypeError: 'tuple' object doesn't support item deletion # del my_tuple[3] # зато можно удалить кортеж полностью del my_tuple # вызов приведет к ошибке NameError: name 'my_tuple' is not defined print(my_tuple)

Вывод:

Traceback (most recent call last): 
File "", line 12, in
NameError: name 'my_tuple' is not defined

Методы кортежа

Методы добавления или удаления элементов недоступны для кортежа в силу его неизменяемости.

Для кортежа существует только два метода: .count() и .index() .

my_tuple = ('я', 'б', 'л', 'о', 'к', 'о',) print(my_tuple.count('о')) # Вывод: 2 print(my_tuple.index('к')) # Вывод: 4

Вывод:

Другие операции с кортежами

1. Проверка на вхождение в кортеж

Мы можем проверить, существует ли тот или иной элемент в кортеже или нет, с помощью ключевого слова in и not in .

my_tuple = ('я', 'б', 'л', 'о', 'к', 'о',) print('я' in my_tuple) print('х' in my_tuple) print('п' not in my_tuple)

Вывод:

True
False
True

2. Итерирование по кортежу

Для перебора элементов кортежа можно использовать цикл for .

for name in ('Андрей', 'Маша'): print("Привет, ", name)

Вывод:

Привет, Андрей
Привет, Маша

Преимущества кортежа над списком

Кортежи очень похожи на списки, поэтому они используются в похожих ситуациях. Выбор зависит от задачи. В одном случае эффективнее будет работать кортеж, а в другом — не обойтись без списка.

СodeСhick.io — простой и эффективный способ изучения программирования.

2024 © ООО «Алгоритмы и практика»

Конвертация списка в кортеж в Python

В Python есть несколько встроенных структур данных, включая списки и кортежи. Они оба используются для хранения коллекции элементов. Однако в отличие от списков, кортежи являются неизменяемыми, что означает, что после их создания их нельзя изменить.

Часто возникает ситуация, когда необходимо преобразовать список в кортеж. Это может быть необходимо по различным причинам, например, для обеспечения защиты данных от изменений или для улучшения производительности, поскольку кортежи обрабатываются быстрее, чем списки.

Вот пример кода, который не работает:

my_list = [1, 2, 3] tuple(my_list)

При попытке выполнения этого кода может возникнуть ошибка «TypeError: ‘tuple’ object is not callable». Это происходит, когда имя «tuple» было ранее использовано в качестве имени переменной и Python пытается вызвать его как функцию.

Решение проблемы

Проблема решается очень просто. Нужно убедиться, что не используется имя «tuple» в качестве имени переменной. Вот исправленный код:

my_list = [1, 2, 3] my_tuple = tuple(my_list)

Теперь, когда мы печатаем my_tuple , мы видим, что это кортеж (1, 2, 3) . Таким образом, переход от списка к кортежу выполняется успешно.

Помимо этого, желательно всегда стараться давать переменным уникальные и осмысленные имена, чтобы избежать подобных конфликтов и ошибок в будущем.

Как из списка сделать кортеж в python

Кортеж (tuple) представляет последовательность элементов, которая во многом похожа на список за тем исключением, что кортеж является неизменяемым (immutable) типом. Поэтому мы не можем добавлять или удалять элементы в кортеже, изменять его.

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

tom = ("Tom", 23) print(tom) # ("Tom", 23)

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

tom = "Tom", 23 print(tom) # ("Tom", 23)

Если вдруг кортеж состоит из одного элемента, то после единственного элемента кортежа необходимо поставить запятую:

tom = ("Tom",)

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

data = ["Tom", 37, "Google"] tom = tuple(data) print(tom) # ("Tom", 37, "Google")

С помощью встроенной функции len() можно получить длину кортежа:

tom = ("Tom", 37, "Google") print(len(tom)) # 3

Обращение к элементам кортежа

Обращение к элементам в кортеже происходит также, как и в списке, по индексу. Индексация начинается также с нуля при получении элементов с начала списка и с -1 при получении элементов с конца списка:

tom = ("Tom", 37, "Google", "software developer") print(tom[0]) # Tom print(tom[1]) # 37 print(tom[-1]) # software developer

Но так как кортеж — неизменяемый тип (immutable), то мы не сможем изменить его элементы. То есть следующая запись работать не будет:

tom[1] = "Tim"

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

name, age, company, position = ("Tom", 37, "Google", "software developer") print(name) # Tom print(age) # 37 print(position) # software developer print(company) # Google

Получение подкортежей

Как и в списках, можно получить часть кортежа в виде другого кортежа

tom = ("Tom", 37, "Google", "software developer") # получем подкортеж с 1 по 3 элемента (не включая) print(tom[1:3]) # (37, "Google") # получем подкортеж с 0 по 3 элемента (не включая) print(tom[:3]) # ("Tom", 37, "Google") # получем подкортеж с 1 по послдений элемент print(tom[1:]) # (37, "Google", "software developer")

Кортеж как параметр и результат функций

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

def get_user(): name = "Tom" age = 22 company = "Google" return name, age, company user = get_user() print(user) # ("Tom", 37, "Google")

При передаче кортежа в функцию с помощью оператора * его можно разложить на отдельные значения, которые передаются параметрам функции:

def print_person(name, age, company): print(f"Name: Age: Company: ") tom = ("Tom", 22) print_person(*tom, "Microsoft") # Name: Tom Age: 22 Company: Microsoft bob = ("Bob", 41, "Apple") print_person(*bob) # Name: Bob Age: 41 Company: Apple

Перебор кортежей

Для перебора кортежа можно использовать стандартные циклы for и while . С помощью цикла for:

tom = ("Tom", 22, "Google") for item in tom: print(item)

С помощью цикла while:

tom = ("Tom", 22, "Google") i = 0 while i < len(tom): print(tom[i]) i += 1

Проверка наличия значения

Как для списка с помощью выражения элемент in кортеж можно проверить наличие элемента в кортеже:

user = ("Tom", 22, "Google") name = "Tom" if name in user: print("Пользователя зовут Tom") else: print("Пользователь имеет другое имя")

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *