Понимание списка Python в блокировщике веб-сайтов

#python #list-comprehension #any

Вопрос:

В строке 2 метод any() получает «веб-сайт» из понимания списка, а затем выполняет шаг, основанный на логическом значении. Это работает просто отлично. Но я не могу написать эту строку в базовом синтаксисе (используя только if, for, any, in) без синтаксиса понимания списка. Я знаю, что лучше всего использовать понимание списка, но это для образования.

 for line in content:
    if not any(website in line for website in websites):
        file.write(line)
 

Я попробовал что-то подобное и знал, что это не даст правильного результата.

 for line in lines:
    for website in websites:
        if any(website):
            print(line)
 

Полный код можно найти здесь: https://github.com/shaanlearn/pypractice/blob/main/websiteBlocker

Номер линии: 39-41

Комментарии:

1. Так в чем же вопрос

Ответ №1:

вы можете расширить понимание списка следующим образом

 for line in content:
    result = []
    for website in websites:
        result.append(website in line)
    if not any(result):
        file.write(line)
 

Комментарии:

1. Привет @pranta-palit, спасибо за быстрый ответ, это сработало! У меня есть вопрос, хотя, когда я печатаю список результатов, он дает значение bool. вот так: «[Ложь] [Ложь, ложь] [Правда] [Правда, ложь] [Правда] [Правда, Правда] `

2. result это список, содержащий наш запрос в логическом формате, как мы запрашивали, соответствует ли какой-либо из перечисленных веб-сайтов или нет. Вот почему результат содержит эти логические значения. Затем, если вы примените any() метод, он вернет true, если любой элемент из логического списке есть правда, опять-таки, если какая-либо деталь true в логическое список, что означает один или много сайтов существует в этой линии, это будет не пишем строку в файл, если строка содержит перечисленные сайты, строка будет записана в файл.

Ответ №2:

еще один способ расширения:

 for line in content:
    for website in websites:
        if website in line:
            break
    file.write(line)
 

Комментарии:

1. поскольку первый цикл повторяется content , мы каждый раз получаем новую строку и проверяем, существуют ли какие-либо веб-сайты (на веб-сайтах) в строке или нет, если нет, то записываем строку в файл.

Ответ №3:

Попробуйте это

 for line in lines:
    for website in websites:
        if website in line:
            break
    print(line)
 

Комментарии:

1. строка печати должна быть отступом на шаг назад

2. @PrantaPalit Спасибо, что заметили это.