我需要创建一个所有排列的列表,但不包括那些有相同数量的符号改变的排列。
例如,从序列
[-2, -1, 1, 2]
我会得到像这样的所有排列:
[-2, -1], [-2, 1], [-1, -2], [-1, 2], [1, -2], [1, 2], [2, -1], [2, 1]
目前我使用以下代码:
permutation_items = []
permutations = itertools.permutations(range_items, items)
permutation_item = list(permutations)
例如range_items = [-2, -1, 1, 2]
,在哪里items = 2
然后消除我使用的所有相反的重复项
for element in permutation_items:
flag=0
for j in element:
if ((j in element) & ((j*-1) in element)):
flag = 1
break
if flag == 0:
all_solutions.append(element)
我认为这不是最好的方法,因为首先我创建了一个包含所有排列的列表,然后我删除了那些我不想要的,你能建议一个更好的方法吗?还因为如果我需要创建一个包含 10 个或更多数字的排列列表,它会变得非常大......
你认为我会对这些维度有一些问题吗?
请注意:使用这些排列我需要做进一步的操作(我需要找到给出所有可能的数字对的最小排列数),所以我认为我需要将它们存储在一个变量中,也是因为在我的结尾算法我需要将结果存储在文件中。
...好吧,伙计们,您的回答非常好,我喜欢您的兴趣...现在,如果我对变量“range_items”使用包含 30 个元素(正面和负面)的列表,则代码使用的时间非常长,我想问你一个多线程解决方案(所以我可以将代码加载到具有多个内核的集群中)......这可行吗?