【问题标题】:checking if any of multiple substrings is contained in a string - Python检查字符串中是否包含多个子字符串中的任何一个 - Python
【发布时间】:2021-07-10 08:11:42
【问题描述】:

我有一个包含禁止子字符串的黑名单:我需要创建一个 if 语句来检查给定 url 中是否包含任何被禁止的子字符串。如果它不包含其中任何一个,我希望它执行 A(如果存在任何被禁止的内容,则只执行一次,而不是针对每个被禁止的子字符串)。如果 url 包含被禁止的子字符串之一,我希望它执行 B.

black_list = ['linkedin.com', 'yellowpages.com', 'facebook.com', 'bizapedia.com', 'manta.com',
              'yelp.com', 'nextdoor.com', 'industrynet.com', 'twitter.com', 'zoominfo.com', 
              'google.com', 'yellow-listings.com', 'kompass.com', 'dnb.com', 'tripadvisor.com']

这里只是我用来检查它是否有效的两个简单的 url 示例。 url1 里面有禁止子串,而 url2 没有。

url1 = 'https://www.dnb.com/'
url2 = 'https://www.ok/'

我尝试了下面有效的代码,但是是否有更好的方法(计算效率更高)可以做到这一点?我有一个 100k+ url 的数据框,所以担心这会超级慢。

mask = []
for banned in black_list:
    if banned in url:
        mask.append(True)
    else:
        mask.append(False)

if any(mask):
    print("there is a banned substring inside")
else:
    print("no banned substrings inside")      

有人知道更有效的方法吗?

【问题讨论】:

    标签: python python-3.x for-loop if-statement any


    【解决方案1】:

    这是一种可能的单行解决方案:

    print('there is a banned substring inside'
          if any(banned_str in url for banned_str in black_list)
          else 'no banned substrings inside')
    

    如果您更喜欢不那么 Python 的方法:

    if any(banned_str in url for banned_str in black_list):
        print('there is a banned substring inside')
    else:
        print('no banned substrings inside')
    

    【讨论】:

      【解决方案2】:

      您应该根据AB 的执行添加一个标志。

      ban_flag = False
      for banned in black_list:
          if banned not in url:
              continue
          else:
              ban_flag = True
      if ban_flag:
          print("there is a banned substring inside")
      else:
          print("no banned substrings inside")
      
      

      【讨论】:

        猜你喜欢
        • 2023-03-31
        • 2014-06-25
        • 2022-12-30
        • 2013-03-13
        • 1970-01-01
        • 1970-01-01
        • 2013-02-05
        • 2020-08-09
        相关资源
        最近更新 更多