【发布时间】:2021-02-15 00:43:53
【问题描述】:
我正在尝试根据列表中的当前值和下一个值更改 Python 列表中元素的顺序。我想使用此排序来创建一个视频播放列表,其中不包含特定类型的两个连续视频。该列表将被转换为 m3u 播放列表。
我的情况: 我已按以下方式命名我拥有的所有视频:“电影标题”-“发行年份”-“类型”。
例如,我不希望播放列表包含两部连续的动作片。唯一的例外应该是当我使用仅包含动作电影的动作电影目录时。然后可以按随机顺序构建播放列表。
我目前有以下代码:
import os
import glob
from threading import Timer
cwd = os.getcwd()
# create list
videofiles = []
for file in glob.glob('**/*.mp4', recursive=True):
videofiles.append(file)
# split file on last index to compare genre
def sortSplit(file):
return file.split('- ',2)[2]
randomvideo = []
for file in videofiles:
randomvideo.append(sortSplit(file))
randomvideo.sort()
当我使用 sortSplit 函数时,我得到了我想要比较的索引/字符串。但是,我有以下问题:
- 拆分是否会“记住”原始字符串,以便在构建列表时包含完整的文件名?
- 我找不到比较列表中当前元素和下一个元素的方法
对于最后一部分,示例列表可以是:
['movie-year-ACTION', 'movie-year-ACTION', 'movie-year-SCIFI', 'movie-year-DOCUMENTARY']
列表排序应该查看第一个元素中的 ACTION,将其与下一个元素进行比较,看看它们是否相同,然后将下一个元素切换为不是 ACTION 但可以是其他任何类型的类型。由于我预计类型的数量会增长,因此我正在寻找一种方法,例如,这些类型不会固定在另一个列表中。同样,唯一的例外是当列表中的所有元素都是 ACTION 类型时,只需按随机顺序创建列表。
当然,只要能达到这个目的,我对完全不同的方法持开放态度。
【问题讨论】:
-
如果我理解正确,您想按年份和流派对文件列表进行排序(ACTION 应该是第一个,然后是 SCI-FI 等...)?
-
流派的顺序并不重要,我实际上更喜欢每次都创建一个新列表,唯一的规则是两个连续的流派不能以这种方式排序,除了当所有文件属于同一类型时,只需创建这些文件的随机顺序
-
是否有任何边缘情况,例如,如果您列出有 3 部动作片和 1 部恐怖片会怎样。在这种情况下,您最终会得到 2 个彼此相邻的相同内容。
-
我想到了这些场景,但我还没有想出解决方案。正如我预计总交易量会随着时间而变化,理论上这样的情况可能会发生。如果是这种情况,我当然会接受这种情况。
标签: python list sorting playlist