首页 > 解决方案 > 像 os.path.commonprefix 这样的库但返回任何 2+ 输入列表的公共前缀?

问题描述

dict = {'a':['b1','b2', 'b3'], 'b':['b1','b2','b3'], 'c':['b1','b3','b4','b5']}
toList = list(dict.values())
os.path.commonprefix(toList)

os.path.commonprefix(toList) 仅打印 ['b1'] 但我试图在输入的任何列表列表中找到最长的公共前缀,因此 ['b1', 'b2'] 在这里。另一个例子:

[a,b,c],[a,c,c],[a,b] -> [a,b]

[a,c,d],[a,b,c],[a,d] -> [a]


* EDITED ORIGINAL QUESTION - 实现 os.path.commonprefix(toList) 不返回任何现有的公共前缀(如在我的示例中),但输入的所有给定列表的公共前缀。在我的示例中是否有一个库可以满足我的要求?

标签: pythonprefixos.path

解决方案


itertools您可以通过添加到混合中以查找commonprefix所有列表组合中的第一个,然后使用max()返回最长的一个来构建您的初始方法。请注意,这种方法只会返回一个commonprefix,因此如果有多个长度相等且比所有其他结果更长的结果,它只会返回其中一个。

例如:

import itertools
import os

data = [['a','b','c'],['a','c','c'],['a','b']]

prefixes = [os.path.commonprefix([a, b]) for a, b in itertools.combinations(data, 2)]
longest = max(prefixes, key=len)
print(longest)
# OUTPUT
# ['a', 'b']

推荐阅读