【问题标题】: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/ 的路径?
  • 嗯,这可能很危险......

标签: python path prefix prefixes


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 谢谢。我知道它没有明确定义,但我不知道如何解释它。我想要有目录的公共前缀。因此,在您的示例中,它将是:/usr/bin, /usr/etc/, /usr/local。但问题比这更明确。我拥有的路径是 Python 鸡蛋及其可执行文件。我想删除整个鸡蛋,而不是其中的目录(如EGG-INFOpkg_name)。我应该编辑我的问题...
猜你喜欢
  • 2015-08-16
  • 1970-01-01
  • 1970-01-01
  • 2021-09-11
  • 1970-01-01
  • 2021-10-18
  • 2022-01-02
  • 2014-05-27
  • 1970-01-01
相关资源
最近更新 更多