不同路径之间的多个公共前缀

Posted

技术标签:

【中文标题】不同路径之间的多个公共前缀【英文标题】:Multiple common prefixes among different paths 【发布时间】:2011-08-15 06:45:15 【问题描述】:

对不起标题,我的问题如下。我有一个路径列表,我想获得 multiple 个公共前缀。例如,假设我有:

['/usr/local/lib/python2.7/dist-packages/pkg_name-0.1-py2.7.egg/pkg_name',
 '/usr/local/lib/python2.7/dist-packages/pkg_name-0.1-py2.7.egg/EGG-INFO',
 '/usr/bin/pkg_name']

我想拥有:

['/usr/local/lib/python2.7/dist-packages/pkg_name-0.1-py2.7.egg/',
 '/usr/bin/pkg_name']

因为前两个有一个共同的前缀,即目录。希望我说清楚了,

魔方

编辑:我拥有的路径是 Python 鸡蛋和一些可执行文件。我想删除整个鸡蛋,而不是其中的目录,例如EGG-INFOpkg_name。所以它必须是/usr/.../dist-packages/pkg_name-0.1-py2.7.egg/。另一条路径,因为它是可执行文件,所以保持原样。

谢谢

【问题讨论】:

算法如何判断它不应该只是/usr 查看我的编辑。它必须是一个 Python 蛋。 为什么不直接删除包含.egg/ 的路径? 嗯,这可能很危险...... 【参考方案1】:

问题没有明确定义。在这种情况下你想要什么:

/usr/bin/a
/usr/bin/b
/usr/etc
/usr/local

是一个/usr还是两个:/usr/bin/usr,还是三个?

无论哪种情况,算法都是这样的:

    对列表进行排序 取第一个元素并用第二个,第三个,...,第一个元素做os.path.commonprefix(),直到公共前缀不是/;这将是你的第一组 重复第 2 步,从第 (i+1) 个开始

【讨论】:

谢谢。我知道它没有明确定义,但我不知道如何解释它。我想要有目录的公共前缀。因此,在您的示例中,它将是:/usr/bin, /usr/etc/, /usr/local。但问题比这更明确。我拥有的路径是 Python 鸡蛋及其可执行文件。我想删除整个鸡蛋,而不是其中的目录(如EGG-INFOpkg_name)。我应该编辑我的问题...

以上是关于不同路径之间的多个公共前缀的主要内容,如果未能解决你的问题,请参考以下文章

字典树(前缀树)-Java实现

C++:如何为多个重载函数保留公共代码路径?

Java书签 #SpringCloud:接口请求路径添加统一的Prefix前缀

Java书签 #SpringCloud:接口请求路径添加统一的Prefix前缀

Trie树(前缀树)

Trie树(前缀树)