Как написать функцию для получения одной перестановки массива за раз в 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)]

Обратите внимание, что если вы не соберете данные (в список, кортеж и т. Д.) После использования итератора объекта перестановок, данные будут "потеряны" (вам придется пересчитывать заново)

Другие вопросы по тегам