Форум сайта python.su
С чего ты взял? Завтра гляну в сырцы… если не забуду, конечно… но я сомневаюсь, что там не рекурсия.
Сейчас напрягу мозги и напишу итератор…
Офлайн
есть такая теория еще, что любой рекурсивный алгоритм, может быть заменен циклом.
Офлайн
Слышал, но я не настолько крут, чтобы доказывать это.
Офлайн
Мне было влом поновой ломать голову… Я ваш код только дооформил немного под свой стиль и забросилсебе в коллекцию “академических задачек” (вы (Dimka665 и Shiza), я надеюсь, не против?). Держи:
# -*- coding: utf-8 -*-
"""Написать код, который перебирает все комбинации перестановок.
Т.е., если на вход подается например ['a', 'b'], результатом должно быть [['a', 'b'], ['b','a']]
а если ['a', 'b', 'c'], то что-то вроде
[['a', 'b', 'c'], ['a', 'c', 'b'], ['b', 'a', 'c'], ['b', 'c', 'a'], ['c', 'a', 'b'], ['c', 'b', 'a']]
и т. д.
Кто решит задачку наиболее красиво и близко к Zen of Python, тот молодец
(c)Shiza"""
def permutations(l):
if len(l)==1:
return (l,)
else:
result = []
for i in xrange(len(l)):
for n in permutations(l[:i] + l[i+1:]):
result.append((l[i],) + tuple(n))
return result
def ipermutations(l):
if len(l)==1:
yield (l,)
else:
for i in xrange(len(l)):
for n in permutations(l[:i] + l[i+1:]):
yield (l[i],) + tuple(n)
if __name__ == "__main__":
print permutations([1, 2, 3])
print [i for i in ipermutations([1, 2, 3])]
Офлайн
хых. и правда! =)
здорово.
Офлайн
А тож!
Офлайн
ZZZэто генератор, а не итератор)
А тож!
Офлайн
Офлайн
Dimka665А есть принципиальная разница в использовании? Вот и я не вижу.
это генератор, а не итератор)
Офлайн
ZZZпринципиальных нет)Dimka665А есть принципиальная разница в использовании? Вот и я не вижу.
это генератор, а не итератор)
Офлайн