[英]generate a list depending on list length
我有一個包含元組的列表。 我想通過檢查元組的所有第一項來搜索該列表。 如果我只有一個結果,我想返回一個搜索結果索引為 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 都以 1 開頭)
returner("b")
將導致["bd"]
(元組 3 的索引 1,因為結果長度僅為 1)
無法弄清楚這樣一個特殊函數的原因,但更簡單的等價物是:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.