Как из списка получить tuple of tuples
Имеем: a - некий список, полученный, например, чтением строк из файла
Задача: получить из списка кортеж, каждым элементом которого является тоже кортеж
В реальной жизни эта задача встречается чаще, чем можно подумать. Базы данных. Например, работаем с sqlite и пишем в базу тысяч 10-30 строк. Поскольку sqlite это файл со всеми ограничениями на одновременную запись, наша задча сделается минут за 40 ( ну или 20 на ssd).
В sqlite для такого есть решение: executemany, позволяющее записать все строки оптом, так сказать, вот только параметром для этого должен быть именно кортеж кортежей.
Со списками проделать такое обычно легко - генератор навроде:
a = [x.strip() for x in x]
и дело в шляпе.
Кортеж же, как известно, неизменяем, потому данная конструкция возвратит какой-нибудь генератор, но никак не кортеж.
В то же время, мы знаем, что преобразовать строку в кортеж (а элементами списка являются именно строки в нашем случае) очень просто
a = (a,) - да-да, обязательно с запятой, иначе получим ту же строку опять.
Поэтому преобразование списка в кортеж кортежей произведется в два шага:
а) из списка строк - список кортежей
б) из списка кортежей - кортеж кортежей
т.е. ( если a - список, где каждый элемент x)
a = [(x,) for x in a]
a = tuple(a)
Комментарии
Отправить комментарий