擅长:python、mysql、java
<p>我可能会走<code>dict</code>路线,不必检查列表中是否存在项(对于大型列表,这将成为一个(性能)问题)。例如:</p>
<pre><code>list({v[:-8] if v.endswith("_480.mp4") else v[:-4]: v
for v in sorted(videos)}.values())
</code></pre>
<p>这是一种简洁的说法。你知道吗</p>
<p>构造一个字典,它的键是incoming<code>v</code>,对于以<code>"_480.mp4"</code>结尾的值,没有最后8个字符,或者只是去掉最后4个字符,并为完整的incoming字符串赋值。你知道吗</p>
<p>只给我那个字典的值,因为输入是一个<code>list</code>,所以我把它传递给一个列表构造函数,以获得与输出相同的类型。你知道吗</p>
<p>或者为了便于阅读而分解,它可能看起来像这样:</p>
<pre><code>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())
</code></pre>
<p>它使用虚拟基名称(剥离<code>_480.mp4</code>或<code>.mp4</code>)作为字典键。因为您不关心结果列表顺序,所以我们确保<code>_480</code>后缀项在“plain”项之后<code>sorted</code>。这样,如果它们出现,就会覆盖为没有<code>_480</code>后缀的值创建的键。你知道吗</p>