Создание списка всех слов, которые находятся в данной строке и в данном словаре - PullRequest
1 голос
/ 27 января 2020

Я работаю со строкой и словарем в Python, пытаясь l oop через строку, чтобы создать список слов, которые появляются как в строке, так и среди ключей словаря. Сейчас у меня есть:

## dictionary will be called "dict" below
sentence = "is this is even really a sentence"
wordsinboth = []
for w in sentence.split():
    if w in dict:
        wordsinboth += w

Вместо того, чтобы возвращать список слов, разделенных пробелами, однако, этот код возвращает список всех символов в предложении. То же самое происходит, даже когда я пытаюсь создать список разделенных слов перед циклом, как показано ниже:

sentence = "is this is even really a sentence"
wordsinboth = []
sent = sentence.split()
for w in sent:
    if w in dict:
        wordsinboth += w

Я полагаю, что я не могу указать "if w in dict" и все еще разделить на пробельные? Любые предложения о том, как это исправить?

Ответы [ 3 ]

0 голосов
/ 27 января 2020

Вы можете использовать += в списке, но вы должны добавить в него список, а не значение, в противном случае значение преобразуется в список перед добавлением. В вашем случае строки w преобразуются в список всех символов в них (например, 'if' => ['i', 'f']). Чтобы обойти это, превратите значение в список, добавив вокруг него []:

for w in sentence.split():
    if w in dict:
        wordsinboth += [w]
0 голосов
/ 27 января 2020

Использование списочных представлений - это более короткий и элегантный способ для вашего случая:

wordsinboth = [word for word in sentence.split() if w in dict]

Проблема в вашем цикле в том, что вы должны использовать append для добавления нового элемента в wordsinboth вместо + оператор, также имейте в виду, что он может создавать дубликаты, если вам нужны уникальные элементы, вы можете обернуть свой результат в set, что дает вам уникальные слова.

Вот так:

wordsinboth = {word for word in sentence.split() if w in dict}
0 голосов
/ 27 января 2020

Используйте append вместо +=:

sentence = "is this is even really a sentence"
wordsinboth = []
for w in sentence.split():
    if w in dict:
        wordsinboth.append(w)

Оператор += работает не так, как вы ожидаете:

a = [] 
myString = "hello"
a.append(myString)

print(a) # ['hello']

b = [] 
b += myString

print(b) # ['h', 'e', 'l', 'l', 'o']

Если вы интересно, почему это происходит, следующие вопросы хорошо читаются:


Кроме того, обратите внимание, что использование описаний списка может привести к более элегантному решению вашей проблемы:

wordsinboth = [word for word in sentence.split() if word in dict]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...