【问题标题】:Checking if a input is inside a list of urls检查输入是否在 url 列表中
【发布时间】:2020-09-17 16:27:14
【问题描述】:

我在尝试将用户输入与列表匹配时遇到了一些问题。 我希望 python 抓取用户输入的内容,例如:旅行;它将输入与列表中的第一个索引匹配,因为它包含“travel”。如果用户输入:“mystery”,它将抓取第二个链接并返回 true。

代码示例:

url_links = [
    'http://books.toscrape.com/catalogue/category/books/travel_2/index.html', 
    'http://books.toscrape.com/catalogue/category/books/mystery_3/index.html'
]

u_input = input("what genre of books do you want listed?") 

我试过了:

  1. if any(s in url_links for s in u_input.lower()): #this gives false
  2. if u_input.lower() in url_links: #this also gives a false.

谢谢!

【问题讨论】:

  • 请提供预期的minimal, reproducible example。显示中间结果与您的预期不同的地方。我们应该能够复制和粘贴您的代码的连续块,执行该文件,并重现您的问题以及问题点的跟踪输出。
  • @Prune 这个问题还有什么可以补充的?对我来说似乎很清楚,我能够用提供的所有信息来回答它。
  • 就是我上面贴的。最直接的问题是 OP 让我们输入测试数据。
  • @Prune 我不必输入测试数据,从他们提供的if 声明中可以清楚地看出,这不是他们所要求的逻辑。他们清楚地提供了他们正在寻找的用例,展示了他们的尝试,并解释说这些尝试返回错误。我想不出他们还能提供什么有用的东西。

标签: python python-3.x list web-crawler data-science


【解决方案1】:

所以在你的第一个例子中有一个小错误。 您需要检查您的链接列表元素是否包含您的输入字符串,并且在这里

if any(s in url_links for s in u_input.lower()): #this gives false

你正在做相反的事情。您正在检查您的输入字符串字符是否保留在您的链接列表中。

这是正确的做法:

 if any(u_input.lower() in link for link in url_links):

但实际上,我认为这不是完成任务的正确方法。 因为如果我将 'a' 作为输入而不是 'mystery' 传递,那么对于上述条件来说它是 True 。我建议你解析你的链接并从中提取 nessesarry 部分(你可以使用urllib)。

【讨论】:

    【解决方案2】:

    您正在寻找的正确 if 语句是这样的 - 它检查用户的小写输入是否在列表中的任何 URL 中:

    if any(u_input.lower() in url for url in url_links):
    

    下面的语句没有做你想做的事 - 它正在检查用户输入的每个字符是否是 URL 列表中的 URL。这永远不会返回 true,除非您有一个只有一个字符长的 URL,并且用户输入了相同的字符:

    if any(s in url_links for s in u_input.lower()):
    

    这个语句也是不正确的,因为它检查的是用户的整个输入是否是一个 URL,而不是它是否在一个 URL 中:

    if u_input.lower() in url_links:
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-27
      • 1970-01-01
      • 1970-01-01
      • 2017-09-25
      • 2016-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多