Найти - Пользователи
Полная версия: Помогите зеленому
Начало » Python для новичков » Помогите зеленому
1 2
Alex1408
 #Помогите, зеленому. Никак сделать задание не могу. 
#Странно что в инете мало похожего. Ниче найти толком не могу. Буду благодарен за помощь. Еще больше если с кратким пояснением.
#Дана последовательность поисковых запросов из файла:
#
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 марта']
py.user.next
  
>>> queries = 'смотреть сериалы онлайн,новости,какая рыба вобла,пхенчхан золото онлайн,сколько дней до 8 марта'
>>> words = ['онлайн', 'золото']
>>> 
>>> out = ','.join(query for query in queries.split(',')
...                if not set(words).intersection(query.split()))
>>> 
>>> out
'новости,какая рыба вобла,сколько дней до 8 марта'
>>>
PEHDOM
Alex1408
#Необходимо исключить из этой строки запросы, которые НЕ содержат слов из листа words: queries.remove(j)
изменять список по которому проходишь for-ом плхая идея, лучше создать новый список , и в него добавлять подходящие результаты
 queries = 'смотреть сериалы онлайн,новости,какая рыба вобла,пхенчхан золото онлайн,сколько дней до 8 марта'.split(',')
words = ['онлайн', 'золото']
q= []
for j in queries:
    for i in words:
        if i  in j:
            q.append(j)
            break
print(q)
Alex1408
PEHDOM
 #Спасибо большое. 
Alex1408
py.user.next

 # Спасибо. Немного не то. Нужно наоборот - оставить запросы, что содержат слова. Я not перед Set убрал, что нужно получилось. А зачем в 4 строке лист переводить в строчку, а потом опять в лист. Или что то не так понимаю. Можно пояснить ?
doza_and
:) Кажется питон язык одной строчки…
 import re
queries = 'смотреть сериалы онлайн,новости,какая рыба вобла,пхенчхан золото онлайн,сколько дней до 8 марта'
print(re.sub("(онлайн)|(золото)","", queries))
>>> смотреть сериалы ,новости,какая рыба вобла,пхенчхан  ,сколько дней до 8 марта
py.user.next
Alex1408
Нужно наоборот - оставить запросы, что содержат слова.
Alex1408
Я not перед Set убрал, что нужно получилось.
Да, not убрал и всё.

  
>>> queries = 'смотреть сериалы онлайн,новости,какая рыба вобла,пхенчхан золото онлайн,сколько дней до 8 марта'
>>> words = ['онлайн', 'золото']
>>> 
>>> out = ','.join(query for query in queries.split(',')
...                if set(words).intersection(query.split()))
>>> 
>>> out
'смотреть сериалы онлайн,пхенчхан золото онлайн'
>>>

Alex1408
А зачем в 4 строке лист переводить в строчку, а потом опять в лист. Или что то не так понимаю. Можно пояснить ?
Ты знаешь, принято так в программировании: что ты получил, то ты максимально неизменным и оставляешь; меняешь только то, что надо поменять в соответствии с задачей.

Если ты получил хрень какую-то в каком-то виде, то ты такой её и оставляешь на выходе, но при этом на выходе она у тебя вся переделана так, как нужно.

PEHDOM , например, для удобства перевёл данные в более удобный вид, а на выходе так и оставил - в удобном виде. Казалось бы, ну и что? что плохого-то в этом? Ну, для новичка это не плохо.

Но существует такая вещь
wiki. UNIX. программы
На английский вариант тоже надо обратить внимание
wiki. UNIX. programs
9-ое правило гласит
“Делайте каждую программу «фильтром».”

Кстати, Zen питона, он оттуда проистекает, только об этом мало кто знает. Потому что UNIX подзабыли немножко, а в Linux этого всего нет, там фокус другой. Поэтому так и кажется, что Zen - это такое открытие.

Так вот, 9-ое правило гласит
“Делайте каждую программу «фильтром».”
Это значит что? Это значит, что данные к нам приходят в виде текста и уходят от нас в виде текста. Вот как они пришли, вот так они и ушли. Мы не думаем о том, что раз наша программа на питоне, то питоном всё и закончится, а потому нужно всё, что приходит, превращать в питоновское. Мы думаем так: нам пришли данные; нам пришла задача; мы выполняем задачу с этими данными; мы отправляем данные дальше. Почему эти данные в виде строки через запятые, почему то, почему это, - это всё нас не касается, у нас задача своя.

Когда PEHDOM с новичкового уровня выйдет, он начнёт это видеть. Он начнёт видеть “а что там вокруг программы этой происходит, а куда её устанавливают, а какие потоки данных на неё запускают и как она их фильтрует и как там другие программы эти отфильтрованные потоки данных принимают уже на себя и дальше там тоже что-то делают”. То есть он будет видеть заранее, как эта программа работает, когда она уже как бы написана и уже установлена. И зная то, как эти все программы вместе образуют программное поле, он уже будет проектировать её в соответствии с этим программным полем. И таким образом она уже не будет как какой-то треугольный кирпич выбиваться из общей кладки.


tags: unix philosophy
FishHook
опять у гражданина давление поднялось
PEHDOM
не обращай внимания, это сезонное
py.user.next
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]$
Без исходных файлов можно транслировать.
doza_and
py.user.next
На awk записал
Я раньше тоже довольно много на awk писал, но постепенно perl его полностью вытеснил. Можно написать и сложные вещи, да и простые короче будут.
 echo "$text" | perl -n -e 's/онлайн|золото//;print;'
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB