Почему когда добавляю в line.split() параметр => не работает list(set(keywords) & set(t_word)
Есть код:
text = ('Моя програма не працюе, тому що...')
keywords = []
with open('ukr_words.txt', encoding='windows-1251') as f:
for line in f:
#for word in line.split('=>' and ','):
for word in line.split():
keywords.append(word.strip())
print(keywords)
t_word = text.split()
print(t_word)
result=list(set(keywords) & set(t_word))
print(result)
Он выводит ожидаемый результат:
C:\Users\46456\AppData\Local\Programs\Python\Python37\python.exe F:/GD/dev_ri/module_files.py
['працюе,', 'робить', '=>', 'работает;', 'це', '=>', 'это;']
['Моя', 'програма', 'не', 'працюе,', 'тому', 'що...']
['працюе,']
Но когда делаю так:
text = ('Моя програма не працюе, тому що...')
keywords = []
with open('ukr_words.txt', encoding='windows-1251') as f:
for line in f:
#for word in line.split('=>' and ','):
for word in line.split('=>'):
keywords.append(word.strip())
print(keywords)
t_word = text.split()
print(t_word)
result=list(set(keywords) & set(t_word))
print(result)
Выдает пустой список result:
C:\Users\46456\AppData\Local\Programs\Python\Python37\python.exe F:/GD/dev_ri/module_files.py
['працюе, робить', 'работает;', 'це', 'это;']
['Моя', 'програма', 'не', 'працюе,', 'тому', 'що...']
[]
И вопрос по ходу дела: Как сделать так что бы вместо працюе, выводилось працюе? Тут нужно писать условие на игнор запятой?
Ответы (1 шт):
Вы вероятно не заметили, что во втором случае (.split('=>')) вы получили в переменной keywords список не из 7 отдельных слов, а только из этих 3 элементов:
працюе, робить работает; це это;
Значит, result как пересечение этого списка со списком отдельных слов
['Моя', 'програма', 'не', 'працюе,', 'тому', 'що...']
будет пустым.
Объяснение:
Когда примените .split(), разложение для пустых знаков выдает правильно отдельные слова:
In[1]: 'працюе, робить => работает; це => это;'.split()
Out[1]: ['працюе,', 'робить', '=>', 'работает;', 'це', '=>', 'это;']
In[2]: for el in _:
...: print(el)
працюе, робить => работает; це => это;
Но когда примените .split('=>'), строка разделяется только для пары символов =>, значит, уже не работает разложение для пустых знаков на отдельные слова:
In[3]: 'працюе, робить => работает; це => это;'.split('=>')
Out[2]: ['працюе, робить ', ' работает; це ', ' это;']
In[4]: for el in _:
...: print(el)
...:
працюе, робить работает; це это;
Что касается устранения запятой за словом:
if word.endswith(','):
word = word[:-1]
или
word = word[:-1] if word.endswith(',') else word