Вот пример кода:
res = []
for i in game.keys():
for j in game.keys():
if f'{i}{j}' not in res and f'{j}{i}' not in res:
res.append(f'{i}{j}')
print(res)
Мне это нужно, но оно должно работать не только с 2, но и с 3, 4, 5, 6 и 7 аргументами (интересно, есть ли функция, которая возвращает это и принимает такие аргументы, как перестановка и комбинация, так что function(table_Of_Arguments, number_Of_Elements)
). Я мог бы написать свою функцию указанным выше способом, но думаю, что-то подобное уже должно быть.
Я провел небольшое исследование, и многие люди рекомендуют permutation
или combination
от itertools
, но permutation
возвращает слишком много (оно возвращает как {i}{j}, так и {j}{i}), а combination
возвращает слишком мало (оно не возвращает случаи, когда i==j
). Я буду использовать его с table_Of_Arguments
размером 32, поэтому надеюсь, что есть что-то более оптимизированное, чем мой код, потому что 32^7 — довольно большое число.
itertools.permutations
?
вы, конечно, можете написать свою собственную функцию, но, скорее всего, вы копируете itertools
или что-то подобное, не зная, что вы это сделали...
Вам нужен itertools.combinations_with_replacement
Вы могли бы значительно ускорить этот код, если бы res
был набором, а не списком. Также может быть полезно, чтобы элементы res
были замороженными наборами — тогда вам нужно будет выполнить только одну проверку, чтобы обнаружить какой-либо порядок компонентов.
Это дубликат? Нахождение всех комбинаций списка в Python с повторением . В ответе есть решение, которое вы хотите, но ОП, похоже, не понимает, чего они хотят, поэтому я не виню вас, если вы скажете, что это не то же самое.
Напишите, пожалуйста, более информативное название. Если я понимаю, о чем вы спрашиваете, это может быть «Как мне получить комбинации, допускающие повторение?» Советы по этому поводу см. в разделе Как спросить.
Не могли бы вы привести пример с тремя аргументами? С двумя трудно сказать, что означают f'{i}{j}'
и f'{j}{i}'
(вперед/назад или все перестановки).
@MichaelCao Мог бы также написать это как ответ!
Отвечает ли это на ваш вопрос? Список номеров без повторов и упорядочен
Вам нужен itertools.combinations_with_replacement
вы имеете в виду несколько вложенных циклов? что вы пробовали в модуле
itertools
и где это не работает? пожалуйста, покажите рабочий пример.