Найти - Пользователи
Полная версия: Задачка на комбинаторику.
Начало » Python для экспертов » Задачка на комбинаторику.
1 2 3 4
shiza
Раз уж пошла такая пьянка, как учитель ;), предлагаю потренироваться на такую тему:

Написать код, который перебирает все комбинации перестановок.
Т.е., если на вход подается например , результатом должно быть [, ]
а если , то что-то вроде [, , , , , ]
и т. д.

Кто решит задачку наиболее красиво и близко к Zen of Python, тот молодец =)
slivlen
Решение для Python 2.6 =)
import itertools
res = list(itertools.permutations(['a', 'b']))
shiza
черт. :) не знаю даже, будет ли после такого варианта это интересно.
Но… а для питона 2.5?
Ferroman
Смеялся от души :D
bobry
just lol :D
но тему наверное можно развить)
Dimka665
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
Dimka665
Круто!
У меня точно такойже код. С точностью до имен переменных. Даже срезы так-же выгледят. =)
shiza
Но можно ли сделать это без рекурсии?
ZZZ
Врядли. Я тоже пришёл к этому коду. Конечно не “слово в слово”, но принцип тот же.
shiza
но ведь в itertools это как-то сделали (хоть и на С).
Сомневаюсь, что итератор получится сделать на основе такого подхода.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB