首页 > 解决方案 > 合并文件路径列表

问题描述

我有一个目录路径列表,我试图将其减少到可能的最小列表。例如:

bionic/main/installer-amd64/20101020ubuntu543/images/hd-media
bionic/main/installer-amd64/20101020ubuntu543/images/cdrom/xen
bionic/main/installer-amd64/20101020ubuntu543/images/cdrom
bionic/main/installer-amd64/20101020ubuntu543/images
bionic/main/installer-amd64/20101020ubuntu543

我可以摆脱,bionic/main/installer-amd64/20101020ubuntu543因为它可以塌陷到bionic/main/installer-amd64/20101020ubuntu543/images其中我也可以摆脱,因为它可以塌陷到bionic/main/installer-amd64/20101020ubuntu543/images/cdrom其中然后塌陷到bionic/main/installer-amd64/20101020ubuntu543/images/cdrom/xen

我知道有办法做到这一点,但我无法为我的生活弄明白。

标签: python

解决方案


有一个更简单的解决方案:如果对列表进行排序,将每个目录与列表中的下一个目录进行比较就足够了:

dirs = sorted(dirs)

result = []
for i, d in enumerate(dirs):
    if i == len(dirs) - 1 or not dirs[i+1].startswith(d): # unique
        result.append(d)

for d in result:
    print(d)

或者,作为列表理解:

result = [
    d for i, d in enumerate(sorted(dirs))
    if i == len(dirs) - 1 or not dirs[i+1].startswith(d)
]

推荐阅读