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

问题描述

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

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

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

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

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

[[[4,2],\
 [[3,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,[1,4]],[[3,1]]
]

chunk_len=[
    [
        np.array([[1.,2.]]),np.array([[1.,2.],[3.,4.]]),np.array([[0.,0.]])
    ],[
        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,2],1]]]
,

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

chunk_len = [[np.array([[1.,0.]])],\
             [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]