我有一个包含元组的列表。 我想通过检查元组的所有第一项来搜索该列表。 如果我只有一个结果,我想返回一个搜索结果索引为0的列表。 如果结果> 1我想返回一个搜索结果索引为1的列表。
我试图用发电机做这个但是失败了。我现在想出了以下内容,但我觉得这可能会更好......有人建议吗?
a = [("ab", 2), ("ac", 3), ("bd", 3)]
def returner(keyword):
def firstitem(_a):
list1.append(_a[0])
list2.append(_a[1])
def otheritems(_a):
list2.append(_a[1])
list1 = []
list2 = []
append = firstitem
for _a in a:
if _a[0].startswith(keyword):
append(_a)
append = otheritems
return list2 if len(list2) > 1 else list1
returner("a")
会导致[2,3]
(两个元组的索引0从一开始)
returner("b")
会导致["bd"]
(元组3的索引1,因为结果长度只有一个)
答案 0 :(得分:0)
无法弄清楚这样一个特殊功能的原因,但更简单的等价物是:
def returner2(keyword):
rv=[]
first_match=None
for _a in a:
if _a[0].startswith(keyword):
if first_match is None:
first_match=_a[0]
rv.append(_a[1])
if len(rv)==1:
return [first_match]
else:
return rv