Python匹配

Python匹配,python,tuples,match,Python,Tuples,Match,我正在尝试1)查看元组中的前两个元素(例如a或b)是否与元组列表(z)中的前两个元素匹配。2) 如果有匹配项,我想返回元组的第三个元素 所以我想 a = ('one', 'two') b = ('ten', 'ten') z = [('four', 'five', 'six'), ('one', 'two', 'twenty')] 使用生成器表达式,以及: 最简单的解决方案似乎是: >>> a = ('one', 'two') >>> b = ('ten'

我正在尝试1)查看元组中的前两个元素(例如a或b)是否与元组列表(z)中的前两个元素匹配。2) 如果有匹配项,我想返回元组的第三个元素

所以我想

a = ('one', 'two')
b = ('ten', 'ten')

z = [('four', 'five', 'six'), ('one', 'two', 'twenty')]

使用生成器表达式,以及:


最简单的解决方案似乎是:

>>> a = ('one', 'two')
>>> b = ('ten', 'ten')
>>> z = [('four', 'five', 'six'), ('one', 'two', 'twenty')]
>>> next((x[2] for x in z if x[:2] == a), None)
'twenty'
>>> next((x[2] for x in z if x[:2] == b), None)
>>>

当有多个元素匹配时,您想要什么?我正在尝试将a、b或其他元素与从数据库加载的表匹配。数据库中的所有条目都应该是唯一的,所以应该只有一个匹配项。我想我可以安全地抓取找到的第一个匹配项,并立即停止搜索,以使程序运行得更快。好的。那么falsetru的答案似乎更好。为什么在next()的实现中,它似乎会遍历整个生成器,但根据这里的示例,使用next()只处理生成器表达式中的一个元素?@appleLover,只有当项匹配时,生成器才会生成。然后
next
从该生成器中提取一项。@BartoszKP,
next
应用于该生成器。生成器未包装在序列中。它是
next
函数的第一个参数。@appleLover:这里的生成器表达式只生成匹配元组的字符串,一次一个
next()
不是直接应用于
z
,而是应用于
z
的过滤“视图”。很抱歉造成混淆,感谢您的解释。
>>> a = ('one', 'two')
>>> b = ('ten', 'ten')
>>> z = [('four', 'five', 'six'), ('one', 'two', 'twenty')]
>>> next((x[2] for x in z if x[:2] == a), None)
'twenty'
>>> next((x[2] for x in z if x[:2] == b), None)
>>>
def myFunc(t, tList):
    return [r[-1] for r in tList if r[:2] == t] or None