Форум сайта python.su
Раз уж пошла такая пьянка, как учитель ;), предлагаю потренироваться на такую тему:
Написать код, который перебирает все комбинации перестановок.
Т.е., если на вход подается например , результатом должно быть [, ]
а если , то что-то вроде [, , , , , ]
и т. д.
Кто решит задачку наиболее красиво и близко к Zen of Python, тот молодец =)
Отредактировано (Ноя. 11, 2008 18:22:43)
Офлайн
Решение для Python 2.6 =)
import itertools
res = list(itertools.permutations(['a', 'b']))
Офлайн
черт. :) не знаю даже, будет ли после такого варианта это интересно.
Но… а для питона 2.5?
Офлайн
Смеялся от души :D
Офлайн
just lol :D
но тему наверное можно развить)
Офлайн
def permutations(lis):
if len(lis)==1:
return [lis]
res = []
for i in xrange(len(lis)):
for ii in permutations(lis[:i]+lis[i+1:]):
res.append([lis[i]] + ii)
return res
Офлайн
Dimka665
Круто!
У меня точно такойже код. С точностью до имен переменных. Даже срезы так-же выгледят. =)
Офлайн
Но можно ли сделать это без рекурсии?
Офлайн
Врядли. Я тоже пришёл к этому коду. Конечно не “слово в слово”, но принцип тот же.
Офлайн
но ведь в itertools это как-то сделали (хоть и на С).
Сомневаюсь, что итератор получится сделать на основе такого подхода.
Офлайн