对列表中的原始列表进行更改(在元素之间交换)后更新列表-Python

列表(dg)从其中的1个嵌套列表开始,并且在更改开始列表并将产品添加到列表dg中的下一个列表的每一步中。使用的代码是休假的,

events_b_list = []
dg = [[[[a1,b1], [a1,b1]],[[a2,b2], [a2,b2]], [[a3,b3], [a3,b3]],[[a4,b4], [a4,b4]]]]
for recomb_r1 in [0,1]:
    if (recomb_r1 == 0):
        p_1 = (1-rp)
        dg_0 = dg 
    else:
        p_1 = rp
        dg_1 = [[[a1,b3], [a1,b1]],[[a2,b2], [a2,b2]], [[a3,b1], [a3,b3]],[[a4,b4], [a4,b4]]]
    dg = [dg_0, dg_1]
    for recomb_r2 in [0,1]:
        if (recomb_r2 == 0):
            p_2 = (1-r)
            dg_0= dg      
        else:
            p_2 = r   
            swap.r(swap_r1(B, 0, 2,1,1)
        dg.append(B)    
        for recomb_r3 in [0,1]:
etc

[[[a1,b1],[a1,b1]],[[a2,b2],[a2,b2]],[[a3,b3],[a3,b3]],[[a4,b4], [[a4,b4]]]这是列表中的第一个列表,每个recomb_r#事件均引用此嵌套列表中特定元素之间的交换。 recomb_r1指的是第一个b1和第一个b3之间的交换。 [[[a1,b1],[a1,b1]],[[a2,b2],[a2,b2]],[[a3,b3],[a3,b3]],[[a4,b4], [a4,b4]]。基本上,如果recomb_r1 == 0,则dg中的当前列表不变,但是如果recomb_r1确实发生了,则将一个新的,已更改的列表与已更改的元素一起添加到dg中。所以新的dg看起来像这样,

dg= [[[[a1,b1], [a1,b1]],[[a2,b2], [a2,b2]], [[a3,b3], [a3,b3]],[[a4,b4], [a4,b4]]], [[[a1,b3], [a1,b1]],[[a2,b2], [a2,b2]], [[a3,b1], [a3,b3]],[[a4,b4], [a4,b4]]]]

现在,这两个嵌套列表已在列表dg中配对在一起。

类似地,下一步是另一个交换,但是在第二b1和第二b3之间。如果没有发生交换,则最新列表(具有2个成对列表的dg)保持不变,但如果确实发生了交换,则dg中的两个列表都应具有交换关系,并作为新列表附加到dg上(以及前一个recomb_r1中的2个元素)。对于recomb_r3以及其他交换位置,此操作将继续。

我尝试定义一个函数,其中B = [[[a1,b1],[a1,b1]],[[a2,b2],[a2,b2]],[[a3,b3],[a3,b3 ]],[[a4,b4],[a4,b4]]],以帮助进行交换并将更改附加到dg。但我想知道是否有更好的方法来解决这个问题。

def swap_r(B, i, j, x, y):
    B[i][x][y], B[j][x][y] =  B[j][x][y], B[i][x][y]
评论