如何反转 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]
我有一个子列表列表,想反转这个列表的一些对。我想找到一种方法来根据我的数据定义应该反转的对。这是配对列表:
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]