SQLite3 Tkinter несколько ошибок, включая операционную ошибку [дубликат]

flat_list = [item for sublist in l for item in sublist]

, что означает:

for sublist in l:
    for item in sublist:
        flat_list.append(item)

быстрее, чем ярлыки, опубликованные до сих пор. (l - список сгладить.)

Вот соответствующая функция:

flatten = lambda l: [item for sublist in l for item in sublist]

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

$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 3: 143 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 3: 969 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 3: 1.1 msec per loop

Объяснение: ярлыки на основе + (включая подразумеваемое использование в sum), по необходимости, O(L**2), когда есть L подписок - как промежуточный список результатов продолжает увеличиваться, на каждом шаге создается новый объект промежуточного результирующего списка, и все элементы предыдущего промежуточного результата должны быть скопированы (а также несколько новых добавленных в конце). Таким образом (для простоты и без фактической потери общности) скажем, что у вас есть L подсписок из I предметов каждый: первые предметы I копируются взад и вперед L-1 раз, второй I - L-2 раза и т. Д .; общее количество экземпляров: I умножает сумму x для x от 1 до L, т. е. I * (L**2)/2.

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

4
задан user1462787 1 October 2012 в 23:26
поделиться

1 ответ

Таблица, вероятно, уже существовала из предыдущего прогона без ваших изменений и все еще имеет 5 столбцов в базе данных (CREATE TABLE IF NOT EXISTS). Вы можете проверить это, войдя в sqllite из ADP. Просто отпустите таблицу перед запуском приложения.

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

"INSERT INTO " + TABLE_NAME + " (Name, Street, Block, City) Values (" ...etc
7
ответ дан cdonner 27 August 2018 в 23:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: