【问题标题】:Search in python tuple list在 python 元组列表中搜索
【发布时间】:2026-02-18 00:50:02
【问题描述】:
db = [('cat',15,22),('dog',28,30),('human',27,80)]

现在我想创建对“狗”的搜索,所以我的返回值将是 db[1]。我还是想不通(我知道我会用 for item in db: if 'dog' in item[:] 之类的东西,但不知道如何把它放在一起。

请帮忙?

【问题讨论】:

    标签: python list python-2.7 tuples


    【解决方案1】:
    items = [i for i in db if 'dog' in i]
    items[0] if items else None
    # ('dog', 28, 30)
    

    【讨论】:

    • 您无需将元组转换为列表即可使用in[i for i in db if 'dog' in i] 也可以。
    • 没错,我修好了。谢谢。
    • 另外,@user3056783 希望他的返回值是db[1],所以这应该是[i for i in db if 'do' in i][0];如果找不到“狗”,这当然会因IndexError: list index out of range 而爆炸(因为您构建的列表将为空)。
    • 我添加了代码以安全地检查空结果。
    • 是的,我喜欢这个并且有点理解它。如果我要深入研究一下,这种编码叫什么:[i for i in db if 'dog' in i]?这样我就知道要搜索什么了。
    【解决方案2】:

    如果您正在寻找第一个匹配的项目(正如您所说的返回值应该是 db[1]),那么您可以使用

    next((x for x in db if x[0] == 'dog'), None)
    

    如果'dog' 可能在元组的任何元素中 - 这样(28, 'dog', 30) 也会匹配 - 我会选择

    next((x for x in db if 'dog' in x), None)
    

    查看find first element in a sequence that matches a predicate 的答案以了解其工作原理。

    【讨论】:

      【解决方案3】:

      你可以使用过滤器:

      filter(lambda x:'dog' in x, db)
      

      输出:

      [('dog', 28, 30)]
      

      【讨论】:

        【解决方案4】:

        你是说这个吗?

        f = lambda db,x: [_t for _t in db if _t[0]==x][0]
        

        输出:

        >>> f(db,'dog')
        ('dog', 28, 30)
        

        【讨论】: