簡體   English   中英

在列表列表中搜索字符串

[英]Searching for string in a list of lists

我一直在嘗試向我的代碼添加一個函數,該函數允許用戶在列表列表中搜索某些關鍵字。 它僅在輸入與元素相同時才有效,但我希望顯示包含輸入的每個元素。

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"它不會附加到新的匹配列表中

有沒有人對這個問題有一個很好的解決方案?

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)]

在生成器上使用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']]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM