Итератор heapq.merge() просматривает больше элементов, чем в списках
Следуя документации heapq.merge() - я получаю очень странные результаты, и не могу найти, что я делаю неправильно... Настройка выглядит следующим образом:
- Я использую heapq.merge () для сортировки нескольких списков. Протестировано с 2 ~ 8 итераторами списка, и результаты точно такие же. Списки содержат 10K ~ 25K пунктов.
- Элементы списков сами реализуют все, что требуется для сортировки списков (__ lt__(), __ eq__(), ...).
- Я проверял, что эти специальные методы сортировки вызываются как при сортировке самих списков, так и при вызове метода heapq.merge ().
- Я убедился, что списки не содержат повторяющихся записей. Нет даже перекрестного списка. Используя простое число, которое я добавил к каждому элементу, и которое используется в сравнении.
Вывод: перебирая 2 списка по 25 тыс. Элементов в каждом, я получил 100 тыс. Результатов. Удвойте сумму.
Я считаю, что я выполнил все требования здесь. Должен ли я сложить списки в кучу, прежде чем вводить их в heapq.merge? В документах об этом не сказано, и неясно, как / если это необходимо сделать.
Любая подсказка?
2 ответа
Ладно, просто чтобы прояснить, что здесь произошло: моя ошибка заключалась в том, чтобы (небрежно...) указывать итераторы списков, а не сами списки. Как ни странно, функция / компилятор не отвергла его! Как только я передал сами списки, функция работала нормально.
heapq.merge
не устраняет дубликаты. Смотрите здесь для получения дополнительной информации