if python 语句中的多个 and's
Multiple and's in if python statement
我正在编写一个 python 爬虫,它可以在给定页面的 url 中找到联系链接。但是,我的 if 语句看起来很糟糕:
if 'news' not in link and 'archive' not in link and 'download' not in link and 'career' not in link and '././' not in link and '..' not in link and '../' not in link and 'store' not in link and 'mailto' not in link and 'tel:' not in link and '.pdf' not in link:
必须有更好的方法来做到这一点。特别是因为随着我访问越来越多的站点,我将添加更多关于 url 可以包含的内容的规则。
请帮忙!
使用all:
excluded = ['news', 'archive', ]
if all(part not in link for part in excluded):
或any:
if not any(part in link for part in excluded):
你可以聪明地使用 all
和列表理解
checks = ['foo', 'bar']
link = ['something']
if all(k not in link for k in checks):
#do something
all
returns True
如果给定列表中的所有项目都是 True
any
returns True
如果给定列表中的任何项目是 True
示例:
>>> l0 = [False, False]
>>> any(l0)
False
>>> all(l0)
False
>>> l1 = [True, False]
>>> any(l1)
True
>>> all(l1)
False
>>> l2 = [True, True]
>>> any(l2)
True
>>> all(l2)
True
您可以使用列表来存储您的匹配模式,而不是在一个条件下检查所有这些模式。例如
link = 'https://example.com/news'
matchings = ['news', 'archive', 'etc']
for match in matchings:
if not match in link:
do_something()
break
我正在编写一个 python 爬虫,它可以在给定页面的 url 中找到联系链接。但是,我的 if 语句看起来很糟糕:
if 'news' not in link and 'archive' not in link and 'download' not in link and 'career' not in link and '././' not in link and '..' not in link and '../' not in link and 'store' not in link and 'mailto' not in link and 'tel:' not in link and '.pdf' not in link:
必须有更好的方法来做到这一点。特别是因为随着我访问越来越多的站点,我将添加更多关于 url 可以包含的内容的规则。
请帮忙!
使用all:
excluded = ['news', 'archive', ]
if all(part not in link for part in excluded):
或any:
if not any(part in link for part in excluded):
你可以聪明地使用 all
和列表理解
checks = ['foo', 'bar']
link = ['something']
if all(k not in link for k in checks):
#do something
all
returns True
如果给定列表中的所有项目都是 True
any
returns True
如果给定列表中的任何项目是 True
示例:
>>> l0 = [False, False]
>>> any(l0)
False
>>> all(l0)
False
>>> l1 = [True, False]
>>> any(l1)
True
>>> all(l1)
False
>>> l2 = [True, True]
>>> any(l2)
True
>>> all(l2)
True
您可以使用列表来存储您的匹配模式,而不是在一个条件下检查所有这些模式。例如
link = 'https://example.com/news'
matchings = ['news', 'archive', 'etc']
for match in matchings:
if not match in link:
do_something()
break