Форум сайта python.su
#Помогите, зеленому. Никак сделать задание не могу. #Странно что в инете мало похожего. Ниче найти толком не могу. Буду благодарен за помощь. Еще больше если с кратким пояснением. #Дана последовательность поисковых запросов из файла: # queries = 'смотреть сериалы онлайн,новости,какая рыба вобла,пхенчхан золото онлайн,сколько дней до 8 марта' #Необходимо исключить из этой строки запросы, которые НЕ содержат слов из листа words: words = ['онлайн', 'золото'] #У меня получается вот это - но обратный эффект. queries = 'смотреть сериалы онлайн,новости,какая рыба вобла,пхенчхан золото онлайн,сколько дней до 8 марта' words = ['онлайн', 'золото'] queries = queries.split(',') queries for i in words: for j in queries: if i in j: queries.remove(j) print(queries) ['новости', 'какая рыба вобла', 'сколько дней до 8 марта']
Отредактировано Alex1408 (Ноя. 18, 2020 22:20:21)
Офлайн
>>> queries = 'смотреть сериалы онлайн,новости,какая рыба вобла,пхенчхан золото онлайн,сколько дней до 8 марта' >>> words = ['онлайн', 'золото'] >>> >>> out = ','.join(query for query in queries.split(',') ... if not set(words).intersection(query.split())) >>> >>> out 'новости,какая рыба вобла,сколько дней до 8 марта' >>>
Офлайн
Alex1408изменять список по которому проходишь for-ом плхая идея, лучше создать новый список , и в него добавлять подходящие результаты
#Необходимо исключить из этой строки запросы, которые НЕ содержат слов из листа words: queries.remove(j)
queries = 'смотреть сериалы онлайн,новости,какая рыба вобла,пхенчхан золото онлайн,сколько дней до 8 марта'.split(',') words = ['онлайн', 'золото'] q= [] for j in queries: for i in words: if i in j: q.append(j) break print(q)
[code python][/code]
Отредактировано PEHDOM (Ноя. 18, 2020 23:18:36)
Офлайн
PEHDOM#Спасибо большое.
Офлайн
py.user.next
# Спасибо. Немного не то. Нужно наоборот - оставить запросы, что содержат слова. Я not перед Set убрал, что нужно получилось. А зачем в 4 строке лист переводить в строчку, а потом опять в лист. Или что то не так понимаю. Можно пояснить ?
Офлайн
:) Кажется питон язык одной строчки…
import re queries = 'смотреть сериалы онлайн,новости,какая рыба вобла,пхенчхан золото онлайн,сколько дней до 8 марта' print(re.sub("(онлайн)|(золото)","", queries)) >>> смотреть сериалы ,новости,какая рыба вобла,пхенчхан ,сколько дней до 8 марта
Отредактировано doza_and (Ноя. 19, 2020 22:02:37)
Офлайн
Alex1408
Нужно наоборот - оставить запросы, что содержат слова.
Alex1408Да, not убрал и всё.
Я not перед Set убрал, что нужно получилось.
>>> queries = 'смотреть сериалы онлайн,новости,какая рыба вобла,пхенчхан золото онлайн,сколько дней до 8 марта' >>> words = ['онлайн', 'золото'] >>> >>> out = ','.join(query for query in queries.split(',') ... if set(words).intersection(query.split())) >>> >>> out 'смотреть сериалы онлайн,пхенчхан золото онлайн' >>>
Alex1408Ты знаешь, принято так в программировании: что ты получил, то ты максимально неизменным и оставляешь; меняешь только то, что надо поменять в соответствии с задачей.
А зачем в 4 строке лист переводить в строчку, а потом опять в лист. Или что то не так понимаю. Можно пояснить ?
Отредактировано py.user.next (Ноя. 19, 2020 22:46:37)
Офлайн
опять у гражданина давление поднялось
PEHDOM
не обращай внимания, это сезонное
Офлайн
doza_andНа awk записал
Кажется питон язык одной строчки
[guest@localhost sh]$ text="\ > смотреть сериалы онлайн,новости,какая рыба вобла,пхенчхан золото онлайн,сколько дней до 8 марта > смотреть сериалы онлайн,новости золото,какая рыба вобла,пхенчхан онлайн,сколько дней до 8 марта > смотреть сериалы онлайн,новости онлайн,какая рыба вобла,пхенчхан золото,сколько дней до 8 марта > " [guest@localhost sh]$ [guest@localhost sh]$ echo "$text" | awk -F, 'NF {out = ""; for (i = 1; i <= NF; i++) if ($i ~ /(онлайн|золото)/) out = out ? out FS $i : $i; print out}' смотреть сериалы онлайн,пхенчхан золото онлайн смотреть сериалы онлайн,новости золото,пхенчхан онлайн смотреть сериалы онлайн,новости онлайн,пхенчхан золото [guest@localhost sh]$
Отредактировано py.user.next (Ноя. 19, 2020 23:26:17)
Офлайн
py.user.nextЯ раньше тоже довольно много на awk писал, но постепенно perl его полностью вытеснил. Можно написать и сложные вещи, да и простые короче будут.
На awk записал
echo "$text" | perl -n -e 's/онлайн|золото//;print;'
Отредактировано doza_and (Ноя. 20, 2020 17:45:33)
Офлайн