我有一个元组的元组和一个元组。我很想知道第一个元组的哪些元素匹配第二个元组(如果有的话),也考虑部分匹配。
这是一个过滤器函数来演示我的意思。
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/