Я работаю над удалением повторяющихся слов из входной строки. Для этого я использовал OrderedDict. Я попытался реализовать описанное выше, используя два разных метода, которые почти одинаковы, но результат работы программы разный. Кто-нибудь может объяснить, почему это происходит?
Код 1:
from collections import OrderedDict
data = "the an a the"
data = "".join(OrderedDict.fromkeys(data))
print(data)
Код 2:
from collections import OrderedDict
data = "the an a the"
data = "".join(OrderedDict.fromkeys(data.split(" ")))
print(data)
Вывод кода 1: "an" Вывод кода 2: "theana" Я хочу знать, почему возникает эта разница, а также я ожидаю получить результат как "a", так как его получить?






string1 = "the an a the"
words = string1.split()
print (" ".join(sorted(set(words), key=words.index)))
Пожалуйста, добавьте объяснение вокруг вашего кода. Чтобы ОП и будущий читатель могли легко понять ваш ответ.
В вашем подходе 1-й:
data = "".join(OrderedDict.fromkeys(data))
в основном рассматривает переменную data как повторяемый. В этом случае он будет рассматривать нить как повторяемый, который содержит unique символов. Таким образом, уникальными символами будут t, h, e, , a, n, а упорядоченный словарь создается полностью с ключами 6.
В вашем подходе 2-й:
data = "".join(OrderedDict.fromkeys(data.split(" ")))
вы расщепление строку в список (что означает повторяемый). и элементами списка являются the, an, a, а упорядоченный словарь создается с уникальными значениями 3 в качестве ключей.
И на последнем шаге вы присоединяетесь к ним, что означает, что в виде строки будут возвращены только ключи.
Надеюсь это поможет.
самое точное объяснение.
OrderedDict.fromkeys(data)
сделает словарь из каждого символа внутри строки «данные».
результат:
{
'**t**': None,
'**h**': None,
'**e**': None,
...
}
в то время как:
OrderedDict.fromkeys(data.split(" "))
создаст новый словарь с каждым словом в строке (точнее, всем, разделенным пробелом) в качестве ключей нового словаря.
результат:
{
'**the**': None,
'**an**': None,
...
}
и поскольку вам нужен результат, разделенный пробелом, вы должны соединить данные с пробелом,
" ".join(OrderedDict.fromkeys(data.split(" ")))
^ #Notice this space here.
Кроме того, попробуйте отладить свой код. Отладка является важной частью программирования, и она также дает более глубокое понимание кода.
Я получил ожидаемый результат. Но не могли бы вы объяснить причину этих разных результатов в коде 1 и коде 2, которые я предоставил? Я новичок в питоне и поэтому не могу разобраться.