shiza
Ноя. 11, 2008 18:17:34
Раз уж пошла такая пьянка, как учитель ;), предлагаю потренироваться на такую тему:
Написать код, который перебирает все комбинации перестановок.
Т.е., если на вход подается например , результатом должно быть [, ]
а если , то что-то вроде [, , , , , ]
и т. д.
Кто решит задачку наиболее красиво и близко к Zen of Python, тот молодец =)
slivlen
Ноя. 11, 2008 18:49:49
Решение для Python 2.6 =)
import itertools
res = list(itertools.permutations(['a', 'b']))
shiza
Ноя. 11, 2008 19:35:41
черт. :) не знаю даже, будет ли после такого варианта это интересно.
Но… а для питона 2.5?
Ferroman
Ноя. 11, 2008 19:52:34
Смеялся от души :D
bobry
Ноя. 11, 2008 21:24:20
just lol :D
но тему наверное можно развить)
Dimka665
Ноя. 12, 2008 09:16:01
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
shiza
Ноя. 12, 2008 17:02:59
Dimka665
Круто!
У меня точно такойже код. С точностью до имен переменных. Даже срезы так-же выгледят. =)
shiza
Ноя. 12, 2008 17:04:38
Но можно ли сделать это без рекурсии?
ZZZ
Ноя. 13, 2008 00:41:27
Врядли. Я тоже пришёл к этому коду. Конечно не “слово в слово”, но принцип тот же.
shiza
Ноя. 13, 2008 01:16:54
но ведь в itertools это как-то сделали (хоть и на С).
Сомневаюсь, что итератор получится сделать на основе такого подхода.