不同路径中多个共同前缀

1 投票
1 回答
863 浏览
提问于 2025-04-16 23:36

抱歉标题有点乱,我的问题是这样的。我有一组路径,我想找出它们的多个公共前缀。比如说,我有:

['/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']

因为前两个路径有一个共同的前缀,它是一个目录。希望我说得够清楚。

rubik

补充说明:我手上的路径是一些Python的包和可执行文件。我想要删除整个包,而不是里面的目录,比如EGG-INFOpkg_name。所以需要的是/usr/.../dist-packages/pkg_name-0.1-py2.7.egg/。而另一个路径,因为是可执行文件,所以保持不变。

谢谢

1 个回答

2

这个问题没有说得很清楚。你想要的结果是什么呢:

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

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

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

  1. 先把列表排序
  2. 取第一个元素,然后用 os.path.commonprefix() 方法和第二个、第三个,直到第 i 个元素进行比较,直到找到的公共前缀不是 /;这就会是你的第一组
  3. 从第 (i+1) 个元素开始,重复第 2 步

撰写回答