数组索引Python的匹配

时间:2014-01-29 21:24:46

标签: python arrays list indexing

我有一个带有n行的多维数组q和一个带有n行的另一个多维数组q2。这些数组包含相同的行,但顺序不同。如何获得2个数组的匹配列表/数组?示例如下:

q=array([a,b,c,d],  #row 1
        [e,f,g,h],  #row 2
        [i,l,m,n])  #row 3

q2=array([e,f,g,h], #row 2
         [a,b,c,d], #row 1
         [i,l,m,n]) #row 3

q_index=[1,2,3]
q2_index=? #I know is [2,1,3] but I can I get it?

我需要创建索引的q列表/数组以及索引的关联q2列表/数组列表。 谢谢

2 个答案:

答案 0 :(得分:0)

您可以使用此代码,但请注意它具有二次运行时。根据您当前的数据结构,多项式是最好的。并且首先将其转换为不同的数据结构对于小n可能是无效的。如果速度更快或者使用哈希表,它将取决于n的大小。鉴于数组中的值是浮点数,您必须特别小心:

def compFloatLists(l1, l2, epsilon=0.0001):
    if len(l1) != len(l2):
        return False
    for e1, e2 in zip(l1, l2):
        if abs(e1-e2) > epsilon:
            return False
    return True

q2_index = []
for e1 in q2:
    for i, e2 in enumerate(q1):
        if compFloatLists(e1, e2):
            q2_index.append(q_index[i])
            break

作为不相关的旁注:您可能希望将q_index重命名为q_indices,这会让您的代码更容易理解恕我直言。

答案 1 :(得分:0)

首先将q转换为字典,首先将项目转换为元组,然后将它们用作键,并使用索引作为值。

>>> q = [['a','b','c','d'], ['e','f','g','h'], ['i','l','m','n']]
>>> q2 = [['e','f','g','h'], ['a','b','c','d'], ['i','l','m','n']]
>>> q_dict = {tuple(x):i for i, x in enumerate(q, 1)}
>>> [q_dict[tuple(item)] for item in q2]
[2, 1, 3]