【问题标题】:Searching for string in a list of lists在列表列表中搜索字符串
【发布时间】:2018-10-28 20:03:22
【问题描述】:

我一直在尝试向我的代码中添加一个函数,该函数允许用户在列表列表中搜索某些关键字。它仅在输入与元素相同但我希望包含输入的每个元素都显示时才有效。

infil = open("books.txt" , "r")
books_string = infil.read()
infil.close()
books_li = books_string.splitlines()
books_li.sort()

li_to_present= []
for element in books_li:
    parts = element.split(",")
    li_to_present.append(parts)

user_in = input("Search: ")
matches = [x for x in li_to_present if user_in in x]

示例: 部分列表li_to_present 是:

['Birgitta Trotzig', ' Dykungens dotter'], ['Bo Giertz', ' Stengrunden']

如果用户输入的是"Birgitta",它不会追加到新的匹配列表中

有没有人能很好地解决这个问题?

【问题讨论】:

    标签: python search


    【解决方案1】:
    import re
    
    infil = open("books.txt" , "r")
    books_string = infil.read()
    infil.close()
    books_li = books_string.splitlines()
    books_li.sort()
    
    
    li_to_present = []
    for element in books_li:
        parts = element.split(",")
        li_to_present.append(parts)
    
    user_in = input("Search: ")
    matches = [x for x in li_to_present if re.search(user_in, x)]
    

    【讨论】:

      【解决方案2】:

      在生成器上使用all() 函数,该函数会产生用户输入是否在子列表的每个字符串中。

      user_in = input("Search: ")
      matches = [l for l in li_to_present if any(user_in in s for s in l)]
      

      例如

      >>> li_to_present = [['Birgitta Trotzig', ' Dykungens dotter'],
                           ['Bo Giertz', ' Stengrunden']]
      >>> user_in = input("Search: ")
      Search: Birgitta
      >>> matches = [l for l in li_to_present if any(user_in in s for s in l)]
      >>> matches
      [['Birgitta Trotzig', ' Dykungens dotter']]
      

      【讨论】:

      • 谢谢,现在它实际上附加了元素。但是您知道如何将包含元素“Birgitta”的整个列表(即 ['Birgitta Trotzig', 'Dykungens dotter'] )附加到匹配列表中吗?
      猜你喜欢
      • 2020-03-12
      • 1970-01-01
      • 1970-01-01
      • 2014-08-30
      • 2021-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-07
      相关资源
      最近更新 更多