Я не смог проверить это, но это переводится как:
ham_feature_matrix = [[[int(each_word == dicword) for dicword in dictionary] for each_word in each_file] for each_file in train_ham]
[int(each_word == dicword) for dicword in dictionary]
- это часть, которая больше всего изменяется по сравнению с вашим исходным кодом.
По сути, так как выперебирая слова словаря, вам не нужно enumerate
, чтобы установить соответствующие слоты на 1
.Понимание создает список с результатом сравнения, равным 0
или 1
при преобразовании в целые числа.Вам не нужно получать ключи, поскольку итерации по словарю итерируют ключи по умолчанию.
Остальные циклы тривиальны.
Проблема, которую я вижу здесь, заключается в том, чтовы выполняете итерацию по словарю, чтобы создать список логических значений, но порядок словаря не является фиксированным, поэтому вы будете каждый раз получать разные результаты (как в исходном коде), если только вы не сортируете элементы каким-либо образом.