строка по номеру

Oct 25, 2015 01:25

Есть такой забавный рекурсивный алгоритм перечисления всех строк (использущий yield из питона):

letters = "abcdefghijklmnopqrstuvwxyz"
def all_strings():
yield ''
for s in all_strings():
for c in letters:
yield s + c
Чтобы перечислить все строки - перечисляем все строки и добавляем варианты суффиксов a,b,c,...,z. ( Read more... )

soft-dev

Leave a comment

Comments 4

ex_juan_gan October 25 2015, 03:22:45 UTC
Это прекрасно.

Reply


gegmopo4 October 25 2015, 05:40:43 UTC
//

Иначе получится бесконечная рекурсия.

Вариант без рекурсии:

letters = "abcdefghijklmnopqrstuvwxyz"
def string_by_index(i):
s = ''
n = len(letters)
while i:
i, j = divmod(i-1, n)
s += letters[j]
return s[::-1]

Reply

_winnie October 25 2015, 15:38:47 UTC
> //
> Иначе получится бесконечная рекурсия.
Я чувствую, сишные привычки записи деления ещё не раз меня подведут при переходе с Python2 на Python3. Поправил, спасибо.

> Вариант без рекурсии:
Компактненько!

Reply


sassa_nf October 25 2015, 23:36:53 UTC
ну да, так и нужно писать. Меня здесь только озадачивает мемори футпринт генераторов, ведь можно обойтись одной-двумя строками (в смысле, объектами).

Reply


Leave a comment

Up