2017-01-25 124 views
-2

我有一个包含元组的列表。 我想通过检查元组的所有第一项来遍历该列表。 如果我只有一个结果,我想返回一个索引为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]

returner("b")(索引开始一个或两个元组0)将导致["bd"](数组3作为结果的长度的索引1是只有一个)

+4

你能提供一个输入和期望输出的例子?我不清楚你想达到什么目的。结果是什么? –

回答

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 
+0

Thanks.Edited我的原始帖子输出的例子。你的等价物是不相同的。 – sanders

+0

对不起,但我看不出它有什么不同。此功能为您在文章 – Bitonator

+0

中提供的输入返回相同的结果。改变了我的代码。现在更接近我打算做的事情。 – sanders