Я ищу чистый способ сделать это в Python:
Допустим, у меня есть два итератора «iter1» и «iter2»: возможно, генератор простых чисел , и itertools.count (). Я априори знаю, что оба они бесконечны и монотонно возрастают. Теперь я хочу выполнить простую операцию с двумя аргументами «op» (возможно, operator.add или operator.mul) и вычислить каждый элемент первого итератора с каждым элементом затем, используя указанную операцию, затем выводите их по одному, отсортировав. Очевидно, это сама бесконечная последовательность. (Как упоминалось в комментарии @RyanThompson: это будет называться декартовым произведением этих последовательностей ... или, точнее, 1d-сортом этого произведения.)
Каков наилучший способ to:
Допустимые упрощающие предположения:
Пожалуйста: не не основывайте свой ответ на том факте, что в моих примерах упоминались простые числа или счет () .... У меня есть несколько применений этой самой концепции, которые НЕ связаны с простыми числами и count ().
ОБНОВЛЕНИЕ: OMG! Какая отличная дискуссия! И несколько отличных ответов с действительно подробными объяснениями. Спасибо. StackOverflow Rocks; вы, ребята, молодцы.
Я собираюсь в ближайшее время более подробно вникать в каждый ответ и дать примерному коду удар в уши. Из того, что я читал до сих пор, мои первоначальные подозрения подтверждаются, что для этого не существует "простой идиомы Python". Вернее, так или иначе, я могу » t избежать сохранения всех полученных значений iter1 и iter2 на неопределенный срок.
FWIW: вот официальный «тестовый пример», если вы хотите попробовать свои решения.
import operator
def powers_of_ten():
n = 0
while True:
yield 10**n
n += 1
def series_of_nines():
yield 1
n = 1
while True:
yield int("9"*n)
n += 1
op = operator.mul
iter1 = powers_of_ten()
iter2 = series_of_nines()
# given (iter1, iter2, op), create an iterator that yields:
# [1, 9, 10, 90, 99, 100, 900, 990, 999, 1000, 9000, 9900, 9990, 9999, 10000, ...]