кортеж кортежей

Как из списка получить 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)




Комментарии