我有一个列表([[a,b,c],[d,e,f],[g,h,i]...]).
我试图通过在当前状态上进行N次交换,将一个列表中的一个项与另一个列表中的一个项交换,来生成所有可以从此状态访问的列表。你知道吗
例如,用d交换a,用e交换b,用g交换f(注意,我们看到的是N个可以从这个状态进行的交换)
但是,我不想执行实际的交换,而是生成一个交换指令列表,其中还包括sublist
的索引。你知道吗
因此,N=3的输出示例如下:
((1: a, 2: d), (1: b, 2: e), (1: c, 2: f))
(意思是把a从l1
换成d从l2
,
将l1
的b与l2
的e交换,
将来自l1
的c与来自l2
的f交换)
((1: a, 2: e), (1: b, 2: d), (1: c, 2: f))
((1: a, 3: g), (1: b, 3: h), (1: c, 3: i))
etc..
但是,最大的问题是-请注意,第一条交换指令和第二条交换指令将导致相同的列表,我不确定如何有效地识别和消除这种情况。你知道吗
现在我正在使用一个非常愚蠢的递归函数,它不区分是否已经执行了交换。代码如下:
def swap(list, num_of_swaps, current_swap, swap_instructions = []):
for l1 in range(0,len(list)):
for l2 in range(l1+1,len(list)):
for e1 in list[l1]:
for e2 in list[l2]:
swap_instructions.append({l1:{'add': e2, 'remove': e1},
l2:{'add': e1, 'remove':e2}})
if current_round < max_repetitions:
swap(list, num_of_swaps, current_round+1, swap_instructions)
success = swap_and_do_checks(list, swap_instructions)
if success:
return swap_instructions
del swap_instructions[-1]
return []
我不知道如何避免重复而不付出太大代价。你知道吗
谢谢你的帮助。你知道吗
谢谢
目前没有回答
相关问题 更多 >
编程相关推荐