Как удалить дубликаты из списка - PullRequest
0 голосов
/ 27 июня 2019

Строковый массив F1 содержит имена пользователей Facebook и их ассоциации если U1, U2, это означает, что U1 является другом U2. Это также означает, что U2 - друг U1 Итак, читайте F1, удаляйте дубликаты и пишите все уникальные парижи F2

test_list = ["U1,U2","U3,U4","U2,U1"]

res_list = [] 
for i in range(len(test_list)): 
    if test_list[i] not in test_list[i + 1:]: 
        res_list.append(test_list[i]) 
print ("Resultant list is : " + str(res_list)) 

оригинальный вывод:

   Resultant list is : ['U1,U2', 'U3,U4', 'U2,U1']

ожидаемый результат:

     Resultant list is : ['U1,U2', 'U3,U4']

1 Ответ

2 голосов
/ 27 июня 2019

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

test_list = ["U1,U2","U3,U4","U2,U1"]
unique = set([frozenset(s.split(",")) for s in test_list])
[",".join(s) for s in unique]

Результат:

['U2,U1', 'U4,U3']

Это не обязательно сохраняет порядок исходных строк. Поскольку наборы симметричны, это, вероятно, не имеет значения. Но если это так, вы можете сделать чуть менее компактную функцию для фильтрации списка:

def dedupe(l):
    seen = set()
    res = []
    for s in l:
        fs = frozenset(s.split(','))
        if fs not in seen:
            res.append(s)
        seen.add(fs)
    return res

Это сохранит первую найденную новую строку:

['U1,U2', 'U3,U4']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...