如何在python中编写函数以一次获取数组的一个置换

如何在python中编写函数以一次获取数组的一个置换,python,permutation,Python,Permutation,下面的代码给出了数组的所有置换,我想编写一个函数,一次可以使用一个置换(我想一次处理一个置换,例如[2,3,5,4,1,6],而不事先生成所有置换,以便能够在目标函数中使用它) 您有几个可能性,首先,permutations返回一个迭代器,这样您的代码就可以通过更改print来处理您需要调用的任何内容 from itertools import permutations def process(s): for s_temp in permutations(s): call

下面的代码给出了数组的所有置换,我想编写一个函数,一次可以使用一个置换(我想一次处理一个置换,例如[2,3,5,4,1,6],而不事先生成所有置换,以便能够在目标函数中使用它)


您有几个可能性,首先,
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)
您可以将数据收集到列表中以进行进一步处理:

s = list(permutations(range(3))) 
s
[(0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 2, 0), (2, 0, 1), (2, 1, 0)]

请注意,如果在使用置换对象迭代器后不收集数据(到列表、元组等中),则数据将“丢失”(必须重新计算)

置换是一个迭代器,因此您可以处理“一次一个置换”,而无需提前生成所有置换,这不是你想要的吗?你的思路是对的,但是如果没有更多的上下文,就不可能告诉你该怎么做。打印一次只使用一个排列?您可以使用任何作用于一个排列的函数替换打印,只需将
print(s_temp)
替换为
my_objective_函数(s_temp)
即可。谢谢!谢谢,这很有帮助
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)]