【问题标题】:Python - MatchingPython - 匹配
【发布时间】:2013-12-29 12:16:01
【问题描述】:
a = ('one', 'two')
b = ('ten', 'ten')

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

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

所以我想得到

myFunc(a,z) -> 'twenty'
myFunc(b,z) -> None

【问题讨论】:

  • 当多个元素匹配时你想要什么?
  • 好吧,我正在尝试将 a、b 或其他任何内容与我从数据库加载的表匹配。 DB 中的所有条目都应该是唯一的,因此应该只有一个匹配项。我想我可以安全地抓取找到的第一个匹配项并立即停止搜索以使程序运行得更快。
  • 好的。那么确实 falsetru 的答案似乎更好。

标签: python tuples match


【解决方案1】:

使用生成器表达式和next:

>>> 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)
>>>

【讨论】:

  • 在你的 next() 实现中,它似乎遍历了整个生成器,但基于这里的示例 stackoverflow.com/questions/1733004/python-next-function,使用 next() 只处理生成器表达式中的一个元素?
  • @appleLover,只有当项目匹配时,生成器才会产生。然后next 从该生成器中获取一项。
  • @BartoszKP, next 应用于生成器。生成器未包装在序列中。它是next 函数的第一个参数。
  • @appleLover:这里的生成器表达式只生成匹配元组的字符串,一次一个。 next() 不直接应用于z,它应用于z 的过滤“视图”,可以这么说。
  • 很抱歉造成混乱,感谢您的解释。
【解决方案2】:

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

def myFunc(t, tList):
    return [r[-1] for r in tList if r[:2] == t] or None

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多