
我们的目标是让用户输入一个字符串,然后在列表中搜索包含该字符串的住宿地点信息,并打印结果。
以下是最初的搜索函数:
def search_name():
response = input()
responses = [match for match in places if response in match]
print(responses)
search_name()这段代码的问题在于,response in match 检查的是 response 是否是整个 match (一个元组) 的元素,而不是检查 response 是否是元组中任何一个字符串元素的子字符串。例如,'Bec' in ('Becketts', 'Bed and Breakfast') 的结果是 False。
为了解决这个问题,我们需要遍历元组中的每个元素,并检查 response 是否是该元素的子字符串。
def search_name():
response = input()
responses = [match for match in places for item in match if response in item]
print(responses)
search_name()这段代码可以工作,但存在重复添加的问题。例如,当输入 'mantle' 时,Freemantle Solent Lodge 的数据会被添加两次,因为 'mantle' 在该元组的多个元素中都存在。
为了避免重复添加,可以使用 any() 函数来检查 response 是否是元组中 任何 元素的子字符串。
def search_name():
response = input()
responses = [match for match in places if any(response in item for item in match)]
print(responses)
search_name()这段代码更有效率,因为它只循环 len(places) 次,并且对于每个元组,只要 response 是其中任何一个元素的子字符串,就会将该元组添加到结果中。
如果元组中包含非字符串类型的数据,例如整数,直接使用 in 运算符会报错。例如,在示例数据中,Claremont Guest House 的元组包含一个字符串 '8'。如果需要处理整数类型,可以使用以下方法将其转换为字符串:
def search_name():
response = input()
responses = [match for match in places if any(response in str(item) for item in match)]
print(responses)
search_name()这段代码将元组中的每个元素都转换为字符串,然后再进行子字符串匹配。
注意事项: 这种方法仅适用于所有值都可以转换为字符串的情况。
如果只需要匹配住宿地点的名称(即元组的第一个元素),可以使用以下代码:
def search_name():
response = input()
responses = [(name, *_) for (name, *_) in places if response in name]
print(responses)
search_name()这段代码使用了解包操作符 *,将元组的第一个元素赋值给 name,其余元素赋值给 _。然后,它检查 response 是否是 name 的子字符串,并将整个元组添加到结果中。
本文介绍了如何在包含多个元组的列表中,根据用户输入的字符串查找匹配的元组。我们讨论了初始代码存在的问题,并提供了多种解决方案,包括遍历元组元素、使用 any() 函数以及处理非字符串类型数据。此外,还介绍了如何仅匹配元组的特定部分(例如名称)。选择哪种解决方案取决于具体的需求和数据结构。
以上就是使用用户输入变量在列表中查找子字符串的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号