如何反转 python 中的某些特定列表对

how to reverse some specific pairs of a list in python

我有一个子列表列表,想反转这个列表的一些对。我想找到一种方法来根据我的数据定义应该反转的对。这是配对列表:

split_list=[[[4, 1], [3, 0], [2, 3], [0, 3], [2, 1], [1, 4]],\
            [[3, 1], [2, 1], [1, 0], [1, 1]]]

它有两个子列表。然后我有了我想要的数据 o 使用它们来找到我应该反转对的位置:

chunk_len=[[np.array([[1., 2.]]), np.array([[1., 2.], [3., 4.]]), np.array([[0., 0.]])],\
           [np.array([[1., 2.]]), np.array([[1., 2.]])]]

我想根据 chunk_len 中存储的子列表的长度找到应该反转的对。 chunk_len 中第一个子列表的长度是 3。根据这个长度,split_list 的第一个子列表应该被分成 3 个块。然后,我想反转偶数块中的对。对于第二个子列表,它有 2 个块,我想反转第二个子列表的对。最后我想把它作为:

[[[4, 1], [3, 0], [3, 2], [3, 0], [2, 1], [1, 4]],\
 [[3, 1], [2, 1], [0, 1], [1, 1]]]

我尝试了以下但一点都不成功:

cor_spl=[]
for i,j in zip (split_list, chunk_len):
    for m in i:
        cor_spl.append(m)
        if m in i[len(j):int (len(j)+len(i))]:
            cor_spl.append (m[::-1])

提前,我非常感谢任何帮助。

正如我们所看到的,在 1st level nested 列表和 split_list 列表中我们都有 4 unit step。所以逻辑如下:

逻辑:
1. 我们从 step 4 unit 开始迭代每个嵌套列表 2 index.
2. 对于每个步骤更新 index and consecutive index 使用此命令以相反的顺序:

i[k+l] = i[k+l][::-1]

代码:

import numpy as np

split_list=[
    [[4, 1], [3, 0], [2, 3], [0, 3], [2, 1], [1, 4]],
    [[3, 1], [2, 1], [1, 0], [1, 1]]
]

chunk_len=[
    [
        np.array([[1., 2.]]), 
        np.array([[1., 2.], [3., 4.]]), 
        np.array([[0., 0.]])
    ],
    [
        np.array([[1., 2.]]), 
        np.array([[1., 2.]])
    ]
]


for i,j in zip (split_list, chunk_len):
    len_ = len(i)
    step_ = len_//len(j)

    for k in range(step_, len_, 2*step_):
        for l in range(step_):
            i[k+l] = i[k+l][::-1]

print(split_list)

输出:

[[[4, 1], [3, 0], [3, 2], [3, 0], [2, 1], [1, 4]], [[3, 1], [2, 1], [0, 1], [1, 1]]]

首先提取新数组中的长度:

chunk_len = [[np.array([[1., 2.]]), np.array([[1., 2.], [3., 4.]]), np.array([[0., 0.]])],\
             [np.array([[1., 2.]]), np.array([[1., 2.]])]]

c_n = [len(l) for l in chunk_len]

然后遍历压缩对。然后机会数为偶数,处理数据反转数组。对于每个块,有 len(sub_list) // c_size 个要反转的双元素数组,因此您应该迭代这些数组:

for (sub_list, c_size) in zip(split_list, c_n):
    for i in range(c_size):
        if i % 2 != 0:
            for j in range(len(sub_list) // c_size):
                j = i * (len(sub_list) // c_size) + j
                sub_list[j] = sub_list[j][::-1]