根据列表长度生成列表

时间:2017-01-25 10:46:25

标签: python list

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

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