Как сделать функцию уникальной в python - PullRequest
0 голосов
/ 07 марта 2020

Хорошо, я должен сделать функцию уникальной. Это то, что он должен делать:

Если ввод: s1 = [{1,2,3,4}, {3,4,5}] unique (s1) должен вернуть: {1,2 , 5} потому что 1, 2 и 5 НЕ находятся в обоих списках.

И если ввод s2 = [{1,2,3,4}, {3,4,5}, {2 , 6}] unique (s2) должен вернуть: {1,5,6}, потому что эти числа уникальны и находятся только в одном списке из этой коллекции из 3 списков.

Я попытался сделать что-то вроде этого:

    for x in s1:
        if x not in unique_list:
            unique_list.append(x)
        else:
            unique_list.remove(x)

print(unique_list)

Но проблема в том, что он принимает весь список как "x", а не каждый элемент из каждого списка.

Кто-нибудь, кто может мне немного помочь с этим? Мне не разрешено ничего импортировать.

Ответы [ 2 ]

7 голосов
/ 07 марта 2020

Python set() объекты имеют метод symmetric_difference() для поиска элементов в любом, но не в обоих наборах. Вы можете сократить список, чтобы найти общее количество элементов, уникальных для каждого набора:

from functools import reduce

l = [{1,2,3,4}, {3,4,5}, {2,6}]

reduce(set.symmetric_difference, l)
# {1, 5, 6}

Конечно, вы можете сделать это без reduce, вручную зацикливая список. ^ будет производить symmetric_difference:

l =  [{1,2,3,4}, {3,4,5}, {2,6}]

final = set()
for s in l:
    final = final ^ s
print(final)
# {1, 5, 6}
4 голосов
/ 07 марта 2020
In [13]: def f(sets):
    ...:     c = {}
    ...:     for s in sets:
    ...:         for x in s:
    ...:             c[x] = c.setdefault(x, 0) + 1
    ...:     return {x for x, v in c.items() if v == 1}
    ...:

In [14]: f([{1,2}, {2, 3}, {3, 4}])
Out[14]: {1, 4}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...