【问题标题】:Find a specific type of URL when 'n' URLs are provided提供“n”个 URL 时查找特定类型的 URL
【发布时间】:2019-08-31 13:15:13
【问题描述】:

这将是我的示例数据:

lis = ['http://wiki.dbpedia.org/about','http://dbpedia.org/data/Category:Cybercrime.rdf',
 'http://dbpedia.org/resource/Stop_Cyberbullying_Day', 
 'http://dbpedia.org/resource/Category:Cybercrime_in_Canada', 
 'http://dbpedia.org/resource/Political_repression_of_cyber-dissidents',  
 'http://creativecommons.org/licenses/by-sa/3.0/']

我使用下面的代码只过滤了那些包含http://dbpedia.org/resource/的URL

c = 'http://dbpedia.org/resource/'
for i in lis:
    if i[:27] is c:
        print (i)

预期的输出应该是:

http://dbpedia.org/resource/Stop_Cyberbullying_Day
http://dbpedia.org/resource/Category:Cybercrime_in_Canada
http://dbpedia.org/resource/Political_repression_of_cyber-dissidents'

但是打印NULL

【问题讨论】:

    标签: python string list url


    【解决方案1】:

    您的代码中有两个问题:

    1. 您使用is 进行比较,它比较两个对象的身份,而不是平等。您想改用==
    2. 您的字符串 ('http://dbpedia.org/resource/') 有 28 个字符长,但您将它与 i 的前 26 个字符进行比较。将您的 i[:27] 替换为 i[:29],或者更好的是使用 i[:len(c)] 使其随 c 字符串动态变化。

    话虽如此,您应该使用str.startswith(),它基本上为您完成了所有这些工作:

    for i in lis:
        if i.starswith(c):
            print(i)
    

    【讨论】:

      【解决方案2】:

      is 运算符检查其操作数的身份。
      只需将str.startwith 用于您的简单案例:

      lst = ['http://wiki.dbpedia.org/about','http://dbpedia.org/data/Category:Cybercrime.rdf',
       'http://dbpedia.org/resource/Stop_Cyberbullying_Day',
       'http://dbpedia.org/resource/Category:Cybercrime_in_Canada',
       'http://dbpedia.org/resource/Political_repression_of_cyber-dissidents',
       'http://creativecommons.org/licenses/by-sa/3.0/']
      
      c = 'http://dbpedia.org/resource/'
      for url in lst:
          if url.startswith(c):
              print(url)
      

      输出:

      http://dbpedia.org/resource/Stop_Cyberbullying_Day
      http://dbpedia.org/resource/Category:Cybercrime_in_Canada
      http://dbpedia.org/resource/Political_repression_of_cyber-dissidents
      

      【讨论】:

      • 我不是拒绝投票的人,但您的回答完全忽略了 OP 字符串 (i[:27]) 的长度错误,这是他代码中的 main 问题,而您只是“吐出”使用startswith() 的答案。并不是说这有什么问题,但如果他们只是快速浏览一下手头的问题,这可能会导致某人对你投反对票。
      • @MarkusMeskanen,我认为这不是一个明智的理由。 OP 没有问“我的代码中有什么特别错误?”。给定长度已知的输入字符串 len(c) 时,使用 i[:27] 毫无意义
      猜你喜欢
      • 1970-01-01
      • 2021-12-14
      • 2017-07-09
      • 2017-01-04
      • 1970-01-01
      • 2021-06-28
      • 2015-12-02
      • 1970-01-01
      • 2011-11-27
      相关资源
      最近更新 更多