簡體   English   中英

根據列表長度生成列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM