首页 > 解决方案 > 如何有效地查看元素是否在元组列表中

问题描述

也许以前有人问过这个问题,但是我一直遇到这个问题,我想知道如何最有效地完成这个问题

问题是:如何有效地检查元素是否在元组列表中?


我有一个元组列表——名为“类别”——它包含一个由类别名称和类别编号组成的元组。

我想查找用户输入的类别名称是否实际上是此元组列表中的一个类别。

例如:

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

标签: pythonpython-3.xlistfor-looptuples

解决方案


把它变成一个dict. 它是用于此数据的适当数据类型:

>>> dict(categories)
{'Exam': 15, 'Homework': 20}

categories = {'Exam': 15, 'Homework': 20}
return user_category_input in categories

如果它必须保持 a listof tuples,您可以使用以下set方法对每个类别进行a zip

cats = set(next(zip(*categories))
{'Exam', 'Homework'}

然后检查成员资格:

return user_category_input in cats

推荐阅读