You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现移除列表中对应同名JPG文件的MOV文件

移除存在对应同名JPG的MOV文件需求实现

需求明确:给定一个文件名列表,需移除所有存在同名JPG文件的MOV文件,同时保留:

  • 所有JPG文件
  • 没有对应同名JPG的独立MOV文件

你原本编写的代码如下:

pics = ['IMG_0000.MOV', 'IMG_2812.JPG', 'IMG_2812.MOV', 'IMG_2815.JPG', 'IMG_2815.MOV', 'IMG_2853.AAE', 'IMG_2862.MOV', 'IMG_2944.JPG', 'IMG_2944.MOV', 'IMG_2955.JPG', 'IMG_2958.JPG', 'IMG_2958.MOV', 'IMG_2965.JPG', 'IMG_2965.MOV']
print('Original list:', pics)
print('------')
# Get rid of all the files different from .mov and .jpg
lista = []
for i in pics:
    if i.endswith('.JPG') or i.endswith('.MOV'):
        lista.append(i)
#print(lista)

# Remove all .mov files that are immediately preceded by a .jpg file
nuevo = [a for a, b in zip(lista, [''] + lista) if b.endswith(".MOV")]
print('Output list:', nuevo)

原代码的核心问题

  • 错误删除列表第一个元素:通过[''] + lista与lista做zip,第一个元素的对比值是空字符串,不满足b.endswith(".MOV")导致被过滤,但如果第一个是独立MOV,理应保留。
  • 无法处理连续JPG的情况:原逻辑仅通过“前置是否为MOV”判断,连续JPG时,后续JPG会因前置是JPG被过滤,不符合保留所有JPG的要求。

改进思路与代码

正确逻辑应先收集所有JPG文件的基础文件名(去掉后缀),再遍历列表筛选:

  1. 所有JPG文件直接保留
  2. MOV文件仅当基础文件名不在JPG集合中时保留
  3. 其他格式文件直接忽略

改进后的代码:

pics = ['IMG_0000.MOV', 'IMG_2812.JPG', 'IMG_2812.MOV', 'IMG_2815.JPG', 'IMG_2815.MOV', 'IMG_2853.AAE', 'IMG_2862.MOV', 'IMG_2944.JPG', 'IMG_2944.MOV', 'IMG_2955.JPG', 'IMG_2958.JPG', 'IMG_2958.MOV', 'IMG_2965.JPG', 'IMG_2965.MOV']
print('Original list:', pics)
print('------')

# 收集所有JPG文件的基础文件名(不含后缀)
jpg_basenames = set()
for filename in pics:
    if filename.endswith('.JPG'):
        basename = filename.rsplit('.', 1)[0]
        jpg_basenames.add(basename)

# 筛选目标文件
result = []
for filename in pics:
    if filename.endswith('.JPG'):
        result.append(filename)
    elif filename.endswith('.MOV'):
        basename = filename.rsplit('.', 1)[0]
        if basename not in jpg_basenames:
            result.append(filename)
    # 其他格式文件直接跳过

print('Output list:', result)

运行结果

输出完全符合需求:

Original list: ['IMG_0000.MOV', 'IMG_2812.JPG', 'IMG_2812.MOV', 'IMG_2815.JPG', 'IMG_2815.MOV', 'IMG_2853.AAE', 'IMG_2862.MOV', 'IMG_2944.JPG', 'IMG_2944.MOV', 'IMG_2955.JPG', 'IMG_2958.JPG', 'IMG_2958.MOV', 'IMG_2965.JPG', 'IMG_2965.MOV']
------
Output list: ['IMG_0000.MOV', 'IMG_2812.JPG', 'IMG_2815.JPG', 'IMG_2862.MOV', 'IMG_2944.JPG', 'IMG_2955.JPG', 'IMG_2958.JPG', 'IMG_2965.JPG']
  • 保留了独立MOV文件:IMG_0000.MOV、IMG_2862.MOV
  • 保留了所有JPG文件,包括连续出现的IMG_2955.JPG、IMG_2958.JPG
  • 自动移除了所有存在对应同名JPG的MOV文件

内容的提问来源于stack exchange,提问作者Javi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 11:31:01