неэлементное спаривание массива в списке - PullRequest
0 голосов
/ 27 марта 2020

допустим, у меня есть список, list = [[0,1,2], [1,2,0], [2,1,3], [3,1,2]]. Я хочу сопоставить и сгруппировать позиции массивов в списке, которые имеют одинаковые номера, несмотря на их положение, и получить их индексы. например, мой код должен давать [0,1,2] и [1,2,0] одинаковые, а их позиция 0 и 1. Мне нужен код для группировки всех элементов в списке, как это. Я знаю базовый c способ сделать это с помощью for и, если l oop, но я хочу знать, есть ли эффективный способ сделать это в python.

Edit - я реализовал решение, используя код ниже, он делает то, что я хочу сделать. Я хочу знать, есть ли эффективный способ сделать это.

    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)

результат

1 Ответ

0 голосов
/ 30 марта 2020

Ваш вопрос неясен, как указано в комментариях, и потенциально может быть дубликатом. Я думаю, что вы хотите, чтобы все массивы считались равными на основе составляющих их элементов, если это то, что вы хотите, то попробуйте использовать set и frozenset

''' 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})}

, вы также упомянули, что у вас уже есть решение вопрос, используя для и если, попробуйте добавить его здесь, чтобы мы могли выяснить, что именно вы хотите.

...