也许以前有人问过这个问题,但是我一直有这个问题,我想知道如何才能最有效地完成这个问题
问题是:如何有效地检查元素是否在元组列表中?
我有一个名为'categories'的元组列表,它接受一个由类别名称和类别编号组成的元组。
我想知道用户输入的类别名是否实际上是这个元组列表中的一个类别。
例如:
categories = [('Exam', 15), ('Homework', 20)]
现在程序要求用户输入类别:
user_category_input = input('Please enter a category name: ')
user_category_input = user_category_input.strip()
现在,我希望程序检查并查看用户输入的类别名称是否实际上是元组列表中的一个类别。如果用户输入"Exam",显然,它是真的!"Exam"是元组列表中的一个类别。如果是"演示文稿"那么它是假的等等。
我一直在使用的简单解决方案是简单地遍历元组并检查第一个元素是否等于用户输入,如下面的代码所示:for category in categories:
if category[0] == user_category_input:
return True
return False
但这是最有效的方法吗?
有可能在这里使用某种lambda吗?提高这里的效率会有什么不同吗?
还在学习python,只是想看看在实践中应该怎么做,所以很抱歉,如果这是多余的或只是一个愚蠢的问题:p
使用any()
return any(c[0] == user_category_input for c in categories)
但是如果你需要经常这样做,最好让categories
成为一个字典,而不是一个元组列表。
使其成为dict
。它是用于该数据的适当数据类型:
>>> dict(categories)
{'Exam': 15, 'Homework': 20}
categories = {'Exam': 15, 'Homework': 20}
return user_category_input in categories
如果它必须保持tuple
的list
,你可以使用zip
为每个类别创建set
:
cats = set(next(zip(*categories))
{'Exam', 'Homework'}
然后检查成员:
return user_category_input in cats