假设我在python中有一个元组列表(名称,年龄)。
我想检查一下该列表中是否有一个元组" Mary"作为名字,我不在乎年龄。
我该如何有效地做到这一点?
答案 0 :(得分:3)
any(a == 'Mary' for a, b in tuples) # check if any tuple has a name equal to Mary
答案 1 :(得分:3)
如果您要进行多次查找,请创建一组名称:
st = {name for name,_ in lst}
然后只需检查if name in st
:...
设置查找是0(1)
使用任何for循环将是线性的,如果你总是保持一组名称更新,如果添加一个新的元组,那么它将更有效。
如果您实际上计划使用其中包含名称的元组,那么您将不得不遍历元组列表并检查每个名称。
答案 2 :(得分:2)
如果你必须有一个清单,那么你将会被O(n)困住(假设清单未分类):
my_tuple = ("Mary", 30)
my_list = [("Amber", 15), ("Mary", 25)]
def find_tuple(tuple_, list_):
for val in list_:
if val[0] == tuple_[0]:
return val
return None
否则,如果您的数据结构灵活,请使用字典:
my_tuple = ("Mary", 30)
my_dict = {"Amber": ("Amber", 15), "Mary": ("Mary", 25)}
def find_tuple(tuple_, dict_):
return dict_.get(tuple_[0], None)
答案 3 :(得分:0)
另一种可能性是列出名称并使用in
运算符:
names = [name for name, _ in tuples]
answer = "mary" in names