Чувствует себя немного не-pythonic, чтобы не учитывать ответ на двойной список, чтобы обрабатывать n-строку с усилием O (1):
"".join(c for cs in itertools.zip_longest(*all_strings) for c in cs)
, где all_strings
- это список строки, которые вы хотите чередовать. В вашем случае all_strings = [u, l]
. Пример полного использования будет выглядеть следующим образом:
import itertools
a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
b = 'abcdefghijklmnopqrstuvwxyz'
all_strings = [a,b]
interleaved = "".join(c for cs in itertools.zip_longest(*all_strings) for c in cs)
print(interleaved)
# 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz'
Как и многие ответы, быстрее всего? Наверное, нет, но просто и гибко. Кроме того, без слишком сложной сложности это немного быстрее, чем принятый ответ (в общем случае добавление строки немного медленнее в python):
In [7]: l1 = 'A' * 1000000; l2 = 'a' * 1000000;
In [8]: %timeit "".join(a + b for i, j in zip(l1, l2))
1 loops, best of 3: 227 ms per loop
In [9]: %timeit "".join(c for cs in zip(*(l1, l2)) for c in cs)
1 loops, best of 3: 198 ms per loop
cat dumpfile.sql | sqlite3 my_database.sqlite
Вы не указывали свою операционную систему и в то время как
sqlite3 my_database.sqlite < export.sqlite3.sql
будет работать на разновидности Unix, она не будет работать на окна.
инверсия команды .dump является командой .read. Синтаксис был бы
sqlite3> .read export.sqlite3.sql
Это также должно работать:
echo '.read export.sqlite3.sql' | sqlite3 my_database.sqlite3
Одно из возможных преимуществ перед " sqlite3 my_database.sqlite3
.read
] может (сейчас или в будущем) быть более продвинутой, чем просто «прочитать весь текст и выполнить его». Он может выполнять пакетную обработку, что сокращает использование памяти для больших дампов. Я признаю, однако, что это довольно неясное и маловероятное преимущество. По всей вероятности, .read
просто считывает каждую строку из ввода и выполняет ее, точно так же, как операторы перенаправления и конвейера.