#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 Спасибо, что заметили это.