python - 元组部分匹配

标签 python algorithm tuples matching

我有一个元组的元组和一个元组。我很想知道第一个元组的哪些元素匹配第二个元组(如果有的话),也考虑部分匹配。

这是一个过滤器函数来演示我的意思。

def f(repo):
    pattern = (None, None, '1.3')
    for idx, item in enumerate(pattern):
        if item != None and item != repo[idx]:
            return False
    return True

>>> repo = (('framework', 'django', '1.3'), ('cms', 'fein', '1.3'), ('cms', 'django-cms', '2.2'))
>>> filter(f, repo)
(('framework', 'django', '1.3'), ('cms', 'fein', '1.3'))

过滤器在这种形式下是无用的,因为模式不能作为参数从外部提供(我想使用相同的函数来检查不同的输入)。有办法解决这个问题吗?

而且,为了更好地解决原始问题,可以采用另一种算法吗?

最佳答案

为什么不使用内置的 filter :

>>> filter(lambda x: x[2] == '1.3', repo)
<<< (('framework', 'django', '1.3'), ('cms', 'fein', '1.3'))

...或 list comprehension :

>>> [x for x in repo if x[2] == '1.3']
<<< [('framework', 'django', '1.3'), ('cms', 'fein', '1.3')]

如果你想把它包装成一个函数:

types = {'desc': 0, 'name': 1, 'version': 2}
def repo_filter(type, critera, repo=repo, types=types):
    return [x for x in repo if x[types[type]] == critera]

>>> repo_filter('version', '1.3')
<<< [('framework', 'django', '1.3'), ('cms', 'fein', '1.3')]

关于python - 元组部分匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7175736/

相关文章:

python - "Pythonic"/将多个变量设置为同一函数调用或列表理解的更优雅的方法

algorithm - 找到第一个只出现一次的元素

vector - Idris - 自定义相关数据类型的映射函数失败

list - scala zip 列表到元组

python - 删除空格分隔的单个字符

python - Google App Engine 向 webapp2.RequestHandler 添加功能

python - R/Python/Julia 中 Matlab 的类型转换函数的等价物是什么

algorithm - 最佳阅读计划

algorithm - 如何比较(子)网?

python - 是否有任何 python 模块可以计算(列表,列表)元组的频率?