【问题标题】:non-element wise pairing of array in a list列表中数组的非元素明智配对
【发布时间】:2020-03-27 11:34:31
【问题描述】:

假设我有一个列表,list=[[0,1,2],[1,2,0],[2,1,3],[3,1,2]]。我想匹配和分组列表中的数组位置,尽管它们的位置相同,但它们的数字相同,并获得它们的索引。 例如,我的代码应该给出 [0,1,2] 和 [1,2,0] 相同,它们的位置是 0 和 1。我需要一个代码来像这样对列表中的所有元素进行分组。 我知道使用 for 和 if 循环执行此操作的基本方法,但我想知道在 python 中是否有有效的方法。

编辑-我使用下面的代码实现了解决方案,它正在做我想做的事情。我想知道有没有一种有效的方法来做到这一点。

    import numpy as np
    pairs=[[0,1],[1,0],[1,2],[2,1]]
    for j in range(4):
        pairs[j]=sorted(pairs[j])  
    print(pairs)
    pr=(len(pairs))
    unique=np.unique(pairs,axis=0)
    print(unique)
    house_clusters=list()
    for t in range(len(unique)):
        uni=unique[t]
        seq2=list()
        for r in range (pr):
            if np.array_equal(pairs[r],uni):
                seq2.append(r)
        house_clusters.append(seq2)
    print(house_clusters)

result

【问题讨论】:

  • 你没有数组列表,你有一个列表元组。还有什么是“对”?请相应地编辑和格式化您的问题。
  • 对不起,我是这个平台的新手。有时我不知道某些东西的确切术语。任何帮助表示赞赏。谢谢

标签: python arraylist pairwise


【解决方案1】:

如 cmets 中所述,您的问题不清楚,可能是重复的。我认为您想要的是根据其组成元素将所有数组视为相等,如果这是您想要的,那么请尝试使用 set 和 freezeset

''' Example all arrays like [0,1,2], [0,2,1], [1,0,2], [1,2,0], [2,0,1], [2,1,0] will be equal to frozenset({0,1,2}) '''
list1 = [[0,1,2], [0,2,1], [1,0,2], [1,2,0], [2,0,1], [2,1,0],[2,1,3],[3,1,2]]
tmp ={frozenset(x) for x in list1}
print(tmp)
output: {frozenset({0, 1, 2}), frozenset({1, 2, 3})}

您还提到您已经使用 for 和 if 解决了该问题,请尝试在此处添加它,以便我们可以弄清楚您到底想要什么。

【讨论】:

  • 感谢 rohan,正如您所问,我已经添加了我的解决方案,我使用 unique 而不是 freezeset 但最后我需要的是每个 freezeset 的分组索引。在你的例子中,最后我想要的是 [[0,1,2,3,4,5],[6,7]] 。你可以看到我附加的结果。
猜你喜欢
  • 2018-05-13
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-08
  • 2023-03-28
  • 2021-08-23
  • 1970-01-01
相关资源
最近更新 更多