Python 两个嵌套列表的匹配顺序

Python 两个嵌套列表的匹配顺序,python,python-2.7,Python,Python 2.7,我有两个嵌套列表: list_a = [[[1, 2], [3, 4], [5, 6]], [[1, 2], [3, 4], [5, 6]]] list_b = [[[5, 6], [1, 2] [3, 4]], [[5, 6], [3, 4], [1, 2]]] 我想对列表_b重新排序,以便每个嵌套列表的顺序,即[5,6]、[1,2]、[3,4]]与列表_a中的顺序匹配: list_b = [[[1, 2], [3, 4], [5, 6]], [[1, 2], [3, 4], [5, 6]

我有两个嵌套列表:

list_a = [[[1, 2], [3, 4], [5, 6]], [[1, 2], [3, 4], [5, 6]]]

list_b = [[[5, 6], [1, 2] [3, 4]], [[5, 6], [3, 4], [1, 2]]]
我想对列表_b重新排序,以便每个嵌套列表的顺序,即[5,6]、[1,2]、[3,4]]与列表_a中的顺序匹配:

list_b = [[[1, 2], [3, 4], [5, 6]], [[1, 2], [3, 4], [5, 6]]]
实际上,这些列表中填充了数千个浮点数据点而不是整数,并且每个列表包含25个嵌入式列表,而不是这里的3个,但是它们的形状总是相同的。我想要列表a的顺序总是相同的,而列表b总是以相同的方式被洗牌

我怎样才能得到我需要的?到目前为止,我已经得到了排序函数,我尝试将它与索引一起使用,以获得我所需要的,因为我知道索引是什么,它们应该是什么。但是,我不知道如何设计一个键来处理在每个嵌套列表上的循环

任何帮助都将不胜感激

要添加上下文,请执行以下操作:

每个阵列以试验x电极x数据点的形式保存EEG数据。我想减去两个这样的阵列,得到它们之间的微分阵列,但首先我必须确保电极对齐。我得到的结果显示,每个阵列中“电极”的顺序不一样,因此从每个阵列中减去了错误的电极

我首先在一个小示例中找出如何获得每个电极的索引列表,如下所示:

chan_order = ['Fp1', 'Fp2', 'F3', 'F7', 'F4', 'F8']
wanted_order = ['Fp1', 'Fp2', 'F3', 'F4', 'F7', 'F8']
new_indices = [chan_order.index(x) for x in wanted_order]
然后我使用排序应用了这种方法:

new_order = sorted(chan_order, key=lambda x: wanted_order.index(x))
这让我在一个简化的例子中得到了我想要的,但我不知道当数据实际上是:

[[[1.02, 2.22, .90, 2.50...], [2.05, 1.11, 2.34, .80...], [1.02, 2.22, .90, 2.50...]]]
这里的每个浮点数都是给定时间点的振幅值,因此这些值波动很大。每个浮点数列表表示来自单个电极的记录。名单代表审判,其中有许多。在上面的例子中,我们可以想象

[1.02, 2.22, .90, 2.50]

来自电极“Fp1”,其余为“Fp2”和“F3”。问题在于,其中一个数组的顺序始终为“Fp1”、“Fp2”、“F3”,而第二个数组的顺序是无序的,例如Fp1、F3、Fp2。此信息存储在单独的1D通道名称列表中,因此我知道每个阵列的通道顺序

在你的玩具模型中,我可以简单地

for i in list_b:
    i.sort()
并从以下方面着手:

list_b = [[[5, 6], [3, 4], [1, 2]], [[3, 4], [1, 2], [5, 6]]]
致:


我怀疑这不是那么容易,而且这种方法可能会破坏你的浮动

根据您的注释,假设顺序始终是固定的,因此您需要以编程方式对嵌套列表的每个元素重新排序

以下是一些参考和玩具数据:

顺序['D','A','B','C'] 期望的顺序['A','B','C','D']

数据=[[1.4,2.9,0.5,1.1],[2.2,1.8,7,0.01]]

定义一个函数,该函数将对列表列表进行爬网,并对嵌套列表的每个元素重新排序/返回。您甚至可以将其与上述新的顺序方法相结合,以删除函数的硬编码元素

def reorderlst: ret=[] 对于lst中的i: ord=[i[1],i[2],i[3],i[0]]这需要根据实际顺序进行更改 附录二 回程网

d2=重新排序数据

d2
[[2.9,0.5,1.1,1.4],[1.8,7,0.01,2.2]

请提供您迄今为止所做的工作的代码。根据您所说的,最简单的解决方案是list_b=list_a,可能会添加一个副本。deepcopy是一个很好的措施。如果你确切地知道你想要的结果是什么,为什么你坚持对现有列表进行排序?在编辑中我尽了最大努力澄清这个问题。如果所有元素都只是浮点数,你如何知道哪些元素属于哪些电极?请提供一个示例,说明阵列的一部分实际上是什么样子的。我打赌你真正想要的是一本字典,但我无法计算出它们的键和值是什么。添加了一些实际数据。它会中断,每个单元格中的值波动很大,并且不是有序的。理解-特别是考虑到你关于振幅波动的观点。在您试图修改的列表中,每个元素的顺序是否一致?比如,它总是D,B,C,A吗?你总是想要A,B,C,D吗?从我看来是的,这是一个安全的假设。这看起来会非常有效,我没有想到[I[1],I[2],I[3],I[0]]是一种可能性。谢谢你的帮助,我知道我的描述不容易理解!
[[[1, 2], [3, 4], [5, 6]], [[1, 2], [3, 4], [5, 6]]]
>>> list_a == list_b
True