【发布时间】: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
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
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] 也可以。
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]?这样我就知道要搜索什么了。
如果您正在寻找第一个匹配的项目(正如您所说的返回值应该是 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 的答案以了解其工作原理。
【讨论】:
你可以使用过滤器:
filter(lambda x:'dog' in x, db)
输出:
[('dog', 28, 30)]
【讨论】:
你是说这个吗?
f = lambda db,x: [_t for _t in db if _t[0]==x][0]
输出:
>>> f(db,'dog')
('dog', 28, 30)
【讨论】: