[英]How to cycle through permutations of a list of 88 elements?
我正在尝试为 88 个元素的列表的每个排列一个接一个地分配一个变量。 这意味着变量将被重新分配一个新的排列 88! 次。 我尝试制作 88 个嵌套的 for 循环,但显然可以嵌套的 for 循环数量是有限的。 我正在使用 Python。
elements = [[211,76], [235,84], [240,88], [300,79], [230,100], [203,110], [202,95], [203,98], [214,97], [248,137], [249,111], [282,120], [263,144], [245,167], [192,172], [124,161], [322,146], [338,142], [355,146], [322,90], [343,105], [363,105], [368,116], [349,83], [348,67], [348,56], [390,75], [327,69], [443,73], [363,96], [396,104], [467,87], [499,87], [197,201], [199,200], [229,201], [227,219], [243,235], [403,166], [370,189], [399,212], [408,227], [214,292], [297,236], [352,276], [430,304], [437,348], [457,347], [430,277], [459,317], [709,153], [772,113], [828,103], [758,308], [767,320], [771,325], [803,330], [778,346], [795,348], [808,341], [834,341], [831,359], [762,391], [764,402], [817,404], [844,426], [827,440], [862,467], [729,433], [732,449], [747,477], [767,480], [657,454], [647,468], [649,467], [626,480], [670,499], [645,524], [652,547], [649,562], [688,566], [580,645], [580,645], [387,632], [419,625], [417,617], [419,614], [575,419]]
for x1 in elements:
tempelements1 = elements.copy()
tempelements1.remove(x1)
for x2 in tempelements1:
tempelements2 = tempelements1.copy()
tempelements2.remove(x2)
for x3 in tempelements2:
tempelements3 = tempelements2.copy()
tempelements3.remove(x3)
for x4 in tempelements3:
tempelements4 = tempelements3.copy()
tempelements4.remove(x4)
for x5 in tempelements4:
tempelements5 = tempelements4.copy()
tempelements5.remove(x5)
#...
for x88 in tempelements87:
for y1 in [x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31, x32, x33, x34, x35, x36, x37, x38, x39, x40, x41, x42, x43, x44, x45, x46, x47, x48, x49, x50, x51, x52, x53, x54, x55, x56, x57, x58, x59, x60, x61, x62, x63, x64, x65, x66, x67, x68, x69, x70, x71, x72, x73, x74, x75, x76, x77, x78, x79, x80, x81, x82, x83, x84, x85, x86, x87, x88]:
这不会在你的有生之年终止。 88! = 1.854826e+134 这就像计算整个宇宙中的所有原子。 你必须为你的问题尝试不同的解决策略。
这是递归排列列表的代码,这避免了显式嵌套循环
def permuteIt(resultList,elementList):
if len(elementList)==0:
yield resultList
else:
for i in range(0,len(elementList)):
resultList.append(elementList.pop(i))
for l in permuteIt(resultList, elementList):
yield resultList
elementList.insert(i,resultList.pop())
for x in permuteIt([],[1,4,7,11]):
print "result: ",x
正如另一位用户所说,您可能想要一种不同的算法:88 个元素有天文数字般的排列。 也就是说,如果您想要排列,请查看标准库的 itertools 模块:
from itertools import permutations
arr = [2,3,5]
for x in permutations(arr):
print(x)
印刷:
(2, 3, 5)
(2, 5, 3)
(3, 2, 5)
(3, 5, 2)
(5, 2, 3)
(5, 3, 2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.