С чего ты взял? Завтра гляну в сырцы… если не забуду, конечно… но я сомневаюсь, что там не рекурсия.
Сейчас напрягу мозги и напишу итератор…
# -*- 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это генератор, а не итератор)
А тож!
shizaЕсть пример аналог на питоне.
но ведь в itertools это как-то сделали (хоть и на С)
Dimka665А есть принципиальная разница в использовании? Вот и я не вижу.
это генератор, а не итератор)
ZZZпринципиальных нет)Dimka665А есть принципиальная разница в использовании? Вот и я не вижу.
это генератор, а не итератор)