创建一个函数来交换嵌套列表中的元素并沿途更新列表

Creating a function that swaps elements in a nested list and updating the list along the way

我需要创建一个函数来交换嵌套列表中的特定元素。 这是我正在使用的代码,列表是 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-r)
        dg_0 = dg
    else:
        p_1 = r
        for i in dg swap_r()    
    dg.append()
    for recomb_r2 in [0,1]:
        if (recomb_r2 == 0):
            p_2 = (1-r)
            dg_0 = dg
        else:
            p_2 = r
            for i in dg swap_r()
        dg.append()

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]]]

类似地,下一步是另一个交换,但在第二个 b1 和第二个 b4 之间。如果交换没有发生,最新列表保持不变,如果发生交换,列表应该交换列表中的元素并在 dg 中形成一个新列表(由更改组成)。我想知道是否有一个函数可以进行切换并通过 dg 进行迭代以创建新的更改列表?

您可以通过复制原始元素来交换元素,然后简单地连接它们。

import copy
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-r)
        dg_0 = dg
    else:
        p_1 = r
        fg = copy.deepcopy(dg)
        fg[0][0][1], fg[2][0][1] = fg[2][0][1], fg[0][0][1]
        dg = dg + fg