python - 合并文件路径列表
问题描述
我有一个目录路径列表,我试图将其减少到可能的最小列表。例如:
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
我知道有办法做到这一点,但我无法为我的生活弄明白。
解决方案
有一个更简单的解决方案:如果对列表进行排序,将每个目录与列表中的下一个目录进行比较就足够了:
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)
]
推荐阅读
- python - Zipline 基本数据
- git - 由于文件名太长的问题,无法签出 Mule 代码
- ethereum - Ropsten(以太坊测试网络)交易无法解决(仍待处理),使用 Web3js
- tfs - TFS2018:暂停和恢复后执行的并行构建
- java - Webstart 上的多个 JAR 应用程序
- javascript - 如何动态放大amchart地图
- mysql - 多日期时间列索引的最佳数据库解决方案
- java - 如何使用 spring-cloud-contract 获得上一个请求的响应
- java - 尝试将 AndroidJUnit4 与标准 JUnit 运行器和委托运行器“org.robolectric.RobolectricTestRunner”一起使用,但无法加载
- ios - AVSpeechSynthesizer 音量太低