Найти - Пользователи
Полная версия: Задачка на комбинаторику.
Начало » Python для экспертов » Задачка на комбинаторику.
1 2 3 4
ZZZ
С чего ты взял? Завтра гляну в сырцы… если не забуду, конечно… но я сомневаюсь, что там не рекурсия.
Сейчас напрягу мозги и напишу итератор…
shiza
есть такая теория еще, что любой рекурсивный алгоритм, может быть заменен циклом.
ZZZ
Слышал, но я не настолько крут, чтобы доказывать это.
ZZZ
Мне было влом поновой ломать голову… Я ваш код только дооформил немного под свой стиль и забросилсебе в коллекцию “академических задачек” (вы (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])]
shiza
хых. и правда! =)
здорово.
ZZZ
А тож!
Dimka665
ZZZ
А тож!
это генератор, а не итератор)
slivlen
shiza
но ведь в itertools это как-то сделали (хоть и на С)
Есть пример аналог на питоне.
ZZZ
Dimka665
это генератор, а не итератор)
А есть принципиальная разница в использовании? Вот и я не вижу.
Dimka665
ZZZ
Dimka665
это генератор, а не итератор)
А есть принципиальная разница в использовании? Вот и я не вижу.
принципиальных нет)
итератор - класс, генератор - функция)
метод next итератора не сохраняет локальные переменные, точку возврата)))
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