假设我有一个列表列表或元组列表,哪个可以更有效地解决我的问题。例如:
student_tuples = [
('john', 'A', 15),
('jane', 'B', 12),
('dave', 'B', 10),
]
任务是根据内部列表或元组的任何元素的键在主列表中查找元素。例如:
使用上面的列表:
find(student_tuples, 'A')
或
find(student_tuples, 15)
都会返回
('john', 'A', 15)
我正在寻找一种有效的方法。
答案 0 :(得分:14)
我会使用filter()
或列表理解。
def find_listcomp(students, value):
return [student for student in students if student[1] == value or student[2] == value]
def find_filter(students, value):
return filter(lambda s: s[1] == value or s[2] == value, students)
答案 1 :(得分:4)
要查找第一个匹配项,您可以使用
def find(list_of_tuples, value):
return next(x for x in list_of_tuples if value in x)
如果找不到匹配的记录,这将引发StopIteration
。要提出更合适的例外,您可以使用
def find(list_of_tuples, value):
try:
return next(x for x in list_of_tuples if value in x)
except StopIteration:
raise ValueError("No matching record found")
答案 2 :(得分:4)
您可以使用python的列表推导来选择和过滤:
def find(tuples, term):
return [tuple for tuple in tuples if term in tuple]
答案 3 :(得分:0)
此函数将返回包含搜索词的元组列表。你走了:
def find_in_tuples(tuples, term):
matching_set = []
for tuple in tuples:
if term in tuple:
matching_set.append(tuple)
return matching_set
>>> find_in_tuples(student_tuples, 'A')
[('john', 'A', 15)]
>>> find_in_tuples(student_tuples, 'B')
[('jane', 'B', 12), ('dave', 'B', 10)]