У меня есть iterable, который покрывает огромное пространство для поиска. Мой план заключается не в том, чтобы сценарий завершился, а просто убил его через определенное время.Iterate over itertools.product в другом порядке, никогда не создавая список
Теперь мне нужно декартово произведение этого пространства и поиск там. itertools.product
производит этот заказ:
>>> list(itertools.product(range(3), repeat=2))
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
В то время как я хочу, чтобы искать в диагональном порядке, аналогичном:
[(0, 0), (0, 1), (1, 0), (0, 2), (1, 1), (2, 0), (1, 2), (2, 1), (2, 2)]
sorted
с некоторой ключевой функцией, которая возвращает сумму элементов кортежа будет моим регулярным но для сортировки все данные должны быть проверены, что в моем случае недопустимо. Есть ли способ сделать это?
Этот вопрос очень похож на this one, но там sorted
по-прежнему используется в ответе. Также я не сразу вижу, как адаптировать ordered_combinations
к ordered_product
.
Как следует порядок вывода ищет 'диапазон (4), повтор = 3'? –
Описание проблемы ограничено для 'repeat = 2', поскольку мышление OP в терминах диагоналей квадратной матрицы M, где число строк и столбцов равно N (в этом случае 3). Случайно «itertools.product» создает список всех позиций элементов в матрице и OP, которые пытаются манипулировать ими для ожидаемого результата, но здесь действительно нужно совсем другое решение, основанное на матричном решении задачи. –
@Chris_Rands Я предполагаю, что все еще в порядке суммы элементов и лексикографически для равной суммы. Хотя меня интересует только случай repeat = 2, и меня не интересует направление диагонали, например, меня не волнует, приходит ли сначала (0,1) 'или' (1,0) ' , @ ŁukaszRogalski хорошо, вот как я это изобразил, да, это не должно быть структурой ответа (хотя это может быть). – qpllb