dict(enumerate(map(taxonomy.get, lst)))
dict(enumerate(filter(None, map(taxonomy.get, lst)), 0))
dict(enumerate(taxonomy[key] for key in lst if key in taxonomy))
1) Вынесите процедуру проверки ответа в отдельную процедуру.
2) Python не Pascal, здесь так не работает.
3) Посмотрите внимательно на клавиатуру. Ничего не смущает?
longclaps, там не квадратичность, т.к. ёмкость вложенного цикла стремительно падает за счёт возрастающего step. На диапазоне до n=10^7 (дальше не смотрел) график очень близок к линейному.
Первый join соединяет сгенерированные слова через пробел, второй join в виде аргумента функции apply_along_axis превращает строки матрицы в обычные 6-буквенные текстовые строки, а choice выбирает из получившегося списка (точнее, массива строк) от 1 до 10 случайных строк. Попробуйте позапускать куски последней строки кода отдельно, и поймёте.