Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 21, 2014 23:25:56

lobster
От:
Зарегистрирован: 2011-06-09
Сообщения: 82
Репутация: +  0  -
Профиль   Отправить e-mail  

Генерация уникальных комбинаций

Приветствую участников форума!
Помогите пожалуйста с алгоритмом.
Имея данные:
one | three
two | four
| five

На выходе нужно получить все возможные комбинации, но в строгом порядке:
one | three
one | four
one | five
two | three
two | four
two | five

Не могли бы вы привести пример кода, с применением процедурного стиля.



Офлайн

#2 Июнь 21, 2014 23:34:49

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Генерация уникальных комбинаций

f = ['one', 'two']
s = ['three', 'four', 'five']
for x in f:
    for y in s:
        print x+"|"+y

one|three
one|four
one|five
two|three
two|four
two|five

Отредактировано Singularity (Июнь 21, 2014 23:36:12)

Офлайн

#3 Июнь 22, 2014 01:17:42

lobster
От:
Зарегистрирован: 2011-06-09
Сообщения: 82
Репутация: +  0  -
Профиль   Отправить e-mail  

Генерация уникальных комбинаций

Singularity
Оказалось все просто, похоже я перегрелся.
Спасибо!



Офлайн

#4 Июнь 22, 2014 12:21:45

Griffon
От: Ukrain, Zaporozhie
Зарегистрирован: 2009-03-04
Сообщения: 324
Репутация: +  11  -
Профиль   Отправить e-mail  

Генерация уникальных комбинаций

По-моему это должно быть в топике для новичков.

from itertools import combinations, product
elements = ["one", "two", "three", "four", "five"]
result = combinations(elements, 2)
print tuple(result)
# >>
#(('one', 'two'), ('one', 'three'), ('one', 'four'), ('one', 'five'),
#('two', 'three'), ('two', 'four'), ('two', 'five'), ('three', 'four'),
#('three', 'five'), ('four', 'five'))
iterable_one = ["one", "two"]
iterable_two = ["three", "four", "five"]
result = product(iterable_one, iterable_two)
print tuple(result)
# >>
#(('one', 'three'), ('one', 'four'), ('one', 'five'), ('two', 'three'),
#('two', 'four'), ('two', 'five'))
Хотя этот код не примут преподаватели. Видимо имеется ввиду код Singularity завернутый в функцию.



Отредактировано Griffon (Июнь 22, 2014 12:25:06)

Офлайн

#5 Июнь 23, 2014 19:05:15

lobster
От:
Зарегистрирован: 2011-06-09
Сообщения: 82
Репутация: +  0  -
Профиль   Отправить e-mail  

Генерация уникальных комбинаций

Griffon
Да не, я не студент. Пишу переборщик директорий, оказалось что рекурсивно будет проще чем итеративно, т.к. работа будет с произвольным числом полей, вот что получилось:

dirs = [["var", "home"], 
           ["www", "html"], 
           ["index.php", "test.php", "info.php"]]
def Recursion(arr, count = 0, mass = [], total = []):
    if not count < len(arr): return
    for i in arr[count]:
        data = mass + [i]
        if count == len(arr)-1:
            total.append(data)
        Recursion(arr, 1+ count, mass + [i], total)
    return total
                        
for i in Recursion(dirs):
    print "/"+"/".join(i)



Офлайн

#6 Июнь 23, 2014 22:54:15

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Генерация уникальных комбинаций

>>> dirs = [["var", "home"], 
           ["www", "html"], 
           ["index.php", "test.php", "info.php"]]
>>> for i in product(*dirs): print i
('var', 'www', 'index.php')
('var', 'www', 'test.php')
('var', 'www', 'info.php')
('var', 'html', 'index.php')
('var', 'html', 'test.php')
('var', 'html', 'info.php')
('home', 'www', 'index.php')
('home', 'www', 'test.php')
('home', 'www', 'info.php')
('home', 'html', 'index.php')
('home', 'html', 'test.php')
('home', 'html', 'info.php')
>>> 

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version