2017-01-25 148 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