#python #python-3.x #set
#python #python-3.x #набор
Вопрос:
Я должен создать набор, включающий все буквы, которые не повторяются в слове.
'balloon', 'banana'
результат example words: {'b','a,','n'}, {'b'}
Я на самом деле не могу понять, как подойти к этому, но я попробовал что-то совершенно бесполезное.
word1, word2 = {"balloon"},{"banana"}
set_word1 = set("balloon",)
set_word2 = set("banana")
print(set_word1.difference(word1))
Я буду признателен за вашу помощь.
Комментарии:
1. XOR может помочь, но если буквы повторяются нечетное количество раз, тогда это будет отображаться: (
2. Попробуйте опубликовать на codegolf.stackexchange.com ? Похоже, кому-то может понравиться пытаться решить.
3. Попробуйте посмотреть коллекции. Счетчик. Например
collections.Counter("balloon")
, вернет словарь, показывающий, сколько раз появляется каждая буква. Затем вам нужно создать набор из тех ключей, значение которых равно 1.4. @FrankYellin Спасибо за ваше предложение.
Ответ №1:
>>> from collections import Counter
>>>
>>> w1="balloon"
>>> w2="banana"
>>>
>>> def f(w):
... return set({k for k, v in Counter(w).items() if v == 1})
...
>>>
>>> f(w1)
{'b', 'a', 'n'}
>>> f(w2)
{'b'}
>>>
набор не допускает повторяющихся элементов, поэтому, если они у вас есть, это не набор
Комментарии:
1. Почему вы создаете словарь, а затем отбрасываете значения? Просто перейдите с:
{k for k, v in Counter(w).items() if v == 1}
2. Честно говоря, это не то решение, которое я ожидал (я думаю, что изменения, которые я внес в вопрос, можно просмотреть). Я уже имел в виду это решение, но поскольку я не мог найти другого способа сделать это, используя только установленные функции, я решил отредактировать свой вопрос и принять этот ответ, чтобы кто-то еще мог извлечь из него пользу. Но я получил отрицательный ответ за это, странные люди. Я не знаю, ожидают ли они, что я удалю вопрос или что.