Удаление повторяющихся слов из строки в python

Я работаю над удалением повторяющихся слов из входной строки. Для этого я использовал 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", так как его получить?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
144
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

string1 = "the an a the"
words = string1.split()
print (" ".join(sorted(set(words), key=words.index)))

Я получил ожидаемый результат. Но не могли бы вы объяснить причину этих разных результатов в коде 1 и коде 2, которые я предоставил? Я новичок в питоне и поэтому не могу разобраться.

Prachi Vaishnav 01.07.2019 11:43

Пожалуйста, добавьте объяснение вокруг вашего кода. Чтобы ОП и будущий читатель могли легко понять ваш ответ.

Sangam Belose 01.07.2019 12:56
Ответ принят как подходящий

В вашем подходе 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 в качестве ключей.

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

Надеюсь это поможет.

самое точное объяснение.

taurus05 01.07.2019 11:49

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.

Кроме того, попробуйте отладить свой код. Отладка является важной частью программирования, и она также дает более глубокое понимание кода.

Другие вопросы по теме