Как написать функцию для получения одной перестановки массива за раз в Python
Код ниже дает все перестановки для массива. Я хочу написать функцию, которая может использовать одну перестановку за раз (например, я хочу обрабатывать одну перестановку за раз [2, 3, 5, 4, 1, 6] не генерируя их все заранее, чтобы можно было использовать его в качестве целевой функции)
s = np.array([1, 2, 3, 4, 5, 6])
from itertools import permutations
for s_temp in permutations(s):
print (s_temp)
1 ответ
У вас есть несколько возможностей, начиная с этого permutations
возвращает итератор, так что ваш код будет работать, изменив print
за то, что вам нужно позвонить.
from itertools import permutations
def process(s):
for s_temp in permutations(s):
call_your_stuff(s_temp)
Также, когда у вас есть объект перестановок, вы можете получить следующий элемент, вызывая next
:
from itertools import permutations
s = permutations(range(3))
s
<itertools.permutations object at 0x000000000377CFC0>
next(s)
(0, 1, 2)
Если вы хотите обработать одну и ту же функцию для каждой перестановки, вы можете просто использовать map
замените lambda
Функция в примере для того, что вам нужно вызвать:
s = permutations(range(3))
map(lambda (x, y, z): x+y-z, s)
[-1, 1, -1, 3, 1, 3]
Вы можете собрать данные в список для дальнейшей обработки:
s = list(permutations(range(3)))
s
[(0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 2, 0), (2, 0, 1), (2, 1, 0)]
Обратите внимание, что если вы не соберете данные (в список, кортеж и т. Д.) После использования итератора объекта перестановок, данные будут "потеряны" (вам придется пересчитывать заново)