Вероятно, я бы пошел по пути dict
, чтобы не проверять наличие элементов в списке (это стало бы проблемой (производительности) для больших списков). Например:
list({v[:-8] if v.endswith("_480.mp4") else v[:-4]: v
for v in sorted(videos)}.values())
Это компактный способ сказать.
Создайте мне словарь, ключ которого является входящим v
без последних 8 символов для значений, заканчивающихся на "_480.mp4"
или иным образом, просто лишенных последних четырех символов и которым присваивается значение полной входящей строки.
Дайте мне только значения этого словаря, и поскольку input был list
, я передал его конструктору списка, чтобы получить тот же тип, что и для вывода.
Или для удобства чтения это может выглядеть примерно так:
videos=["x.mp4","y.mp4","z.mp4","x_480.mp4"]
video_d = {}
for video_name in sorted(videos):
if video_name.endswith("_480.mp4"):
video_d[video_name[:-8]] = video_name
else:
video_d[video_name[:-4]] = video_name
new_videos = list(video_d.values())
В качестве словарного ключа используется виртуальное базовое имя (зачистка _480.mp4
или .mp4
). Поскольку вас не заботит результирующий порядок списков, мы убедились, что суффиксные записи _480
равны sorted
после «простых» записей. Таким образом, если они появляются, они перезаписывают ключи, созданные для значений без суффикса _480
.