Python: Как найти все возможные комбинации трех элементов, взятых вместе в n длинном списке

#python #list #combinations #permutation

#питон #Список #комбинации #перестановка

Вопрос:

У нас есть список [a_1, a_2, a_3,..., a_n] , и у нас также есть функция f(x_1,x_2,x_3)

То, что делает функция, не важно для моего вопроса.

В аргументе функции нам нужно ввести три элемента из списка. Нам нужно повторять процесс до тех пор, пока функция не обработает все возможные выборки из трех элементов, порядок, в котором они выбираются, не имеет значения.

Пример для 4 элементов:

 list = [a_1, a_2, a_3, a_4]
result = []
result.append(f(a_1, a_2, a_3))
result.append(f(a_1, a_2, a_4))
result.append(f(a_2, a_3, a_4))
result.append(f(a_4, a_3, a_1))
 

Только то, что теперь у нас есть n элементов. Как автоматизировать процесс поиска этих комбинаций. Мы не можем использовать какие-либо модные импортные товары. Мы можем использовать только математику и случайный импорт, но ничего больше.

Комментарии:

1. Хорошо, а вы пробовали что-нибудь сделать, чтобы начать решать проблему? Где именно вы застряли?

2. Это только часть проблемы, которую я пытаюсь решить, и именно здесь я застрял.

3. @Higs «Мы можем использовать только математику и случайный импорт»

Ответ №1:

Попробуйте это:

 def comb(m):
    l=m.copy()
    result = []
    while len(l)>3:
        for i in range(1,len(l)-1):
            for k in range(i 1, len(l)):
                result.append(f(l[0], l[i], l[k]))
        l=l[1:]
    result.append(f(l[0], l[1], l[2]))
    return result
 

Комментарии:

1. Обратите внимание, что это приведет к удалению всех, кроме последних 2 элементов списка, переданных в качестве аргумента, что, вероятно, не очень приятно делать…

Ответ №2:

При поиске комбинаций itertools может выполнить эту работу

 lst=[i for i in range(1, 5)]

[1, 2, 3, 4]

[i for i in combinations(lst, 3)]
[(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]
 

Комментарии:

1. «Мы можем использовать только математику и случайный импорт»

2. Я думаю, что это также будет работать с math.comb(n, k) в python, верно?

3. @BiliDebili Взгляните на документ: «math.comb(n, k) Возвращает количество способов выбора k элементов из n элементов без повторения и без порядка.». Так что это совсем не то, что вы хотите.

4. Почему я не использую itertools? Это встроенная библиотека, и определение другой функции, которая делает то же самое, ну, в общем, противоречит тому, что делает библиотека.

5. Думаю, я тоже могу это использовать, я думал, что это более простая проблема, чем есть на самом деле…