Найти - Пользователи
Полная версия: Генерация уникальных комбинаций
Начало » Python для экспертов » Генерация уникальных комбинаций
1
lobster
Приветствую участников форума!
Помогите пожалуйста с алгоритмом.
Имея данные:
one | three
two | four
| five

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

Не могли бы вы привести пример кода, с применением процедурного стиля.
Singularity
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
lobster
Singularity
Оказалось все просто, похоже я перегрелся.
Спасибо!
Griffon
По-моему это должно быть в топике для новичков.
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 завернутый в функцию.
lobster
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)
Shaman
>>> 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')
>>> 
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