#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. Думаю, я тоже могу это использовать, я думал, что это более простая проблема, чем есть на самом деле…