1

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

['/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-INFOor pkg_name。所以它必须是/usr/.../dist-packages/pkg_name-0.1-py2.7.egg/。另一条路径,因为它是一个可执行文件,所以保持原样。

谢谢

4

1 回答 1

2

问题没有很好的定义。在这种情况下你想要什么:

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

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

在任何一种情况下,算法都将是这样的:

  1. 排序列表
  2. take the first element and do os.path.commonprefix() with 2nd, 3rd, ..., i-th until common prefix is not /; that will be your first group
  3. repeat step 2, starting from (i+1)th
于 2011-08-15T07:02:51.397 回答