python - 如何有效地查看元素是否在元组列表中
问题描述
也许以前有人问过这个问题,但是我一直遇到这个问题,我想知道如何最有效地完成这个问题
问题是:如何有效地检查元素是否在元组列表中?
我有一个元组列表——名为“类别”——它包含一个由类别名称和类别编号组成的元组。
我想查找用户输入的类别名称是否实际上是此元组列表中的一个类别。
例如:
categories = [('Exam', 15), ('Homework', 20)]
现在程序要求用户输入一个类别:
user_category_input = input('Please enter a category name: ')
user_category_input = user_category_input.strip()
现在,我希望程序检查用户输入的类别名称是否实际上是元组列表中的一个类别。如果用户输入“Exam”,显然是真的!“考试”是元组列表中的一个类别。如果它是“演示文稿”,那么它是错误的等等。
我一直在使用的简单解决方案是简单地遍历元组并检查第一个元素是否等于用户输入,如以下代码所示:
for category in categories:
if category[0] == user_category_input:
return True
return False
但这是最有效的方法吗?
是否可以在这里使用某种 lambda?在这里提高效率有什么不同吗?
仍在学习python,只是想看看在实践中应该做什么,如果这是多余的或者只是一个愚蠢的问题,很抱歉:p
解决方案
把它变成一个dict
. 它是用于此数据的适当数据类型:
>>> dict(categories)
{'Exam': 15, 'Homework': 20}
categories = {'Exam': 15, 'Homework': 20}
return user_category_input in categories
如果它必须保持 a list
of tuple
s,您可以使用以下set
方法对每个类别进行a zip
:
cats = set(next(zip(*categories))
{'Exam', 'Homework'}
然后检查成员资格:
return user_category_input in cats
推荐阅读
- mysql - 尝试通过 lambda 在 AWS-RDS 中通过 VPC 访问 mysql 的问题
- ios - NavigationBar 上的常用 BarButtonItems
- r - 优化在 tibble/data.frame 中查找范围的性能
- php - 解析POST发送的JSON数据时PHP中的奇怪对象输出
- javascript - 是 AWS-SDK 的 HTML 表单吗?
- c# - 如何在添加之前检查对象列表中是否已经存在具有相同 ID 的对象?
- python - 在 OpenGL 和 Pygame 中无法旋转 3D 立方体
- azure - 在 PS 中执行 post 方法时出现 InvalidOperation
- javascript - 如何在 Html 和 css 等特定组件中导入 javascript 文件?
- javascript - TypeError:无法使用@ViewChild 读取未定义的属性“nativeElement”?