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

如何打乱播放列表的歌曲子列表且保留首元素位置不变?

解决方案:固定播放列表名称,仅打乱歌曲顺序

这问题我碰到过好多次了!直接调用random.shuffle(playlist)确实会把索引0的播放列表名称也打乱,我们只需要把歌曲部分单独分离出来处理就好,有两种简单的实现方式:

方法一:清晰分步写法

这种写法逻辑一目了然,适合新手理解:

import random

# 你的示例播放列表
playlist = ['pop music', ['song A', 'artist A', 'Pop'], ['song B', 'artist B', 'Pop']]

# 1. 提取所有歌曲(索引1及以后的元素)
songs_section = playlist[1:]
# 2. 单独打乱歌曲列表
random.shuffle(songs_section)
# 3. 重新组合播放列表:固定名称 + 打乱后的歌曲
playlist = [playlist[0]] + songs_section

# 输出结果(歌曲顺序随机)
print(playlist)

运行后你会得到类似这样的结果(歌曲顺序随机变化,但名称始终在首位):

['pop music', ['song B', 'artist B', 'Pop'], ['song A', 'artist A', 'Pop']]

方法二:原地修改的简洁写法

如果想更高效地直接修改原列表,可以用切片赋值:

import random

playlist = ['pop music', ['song A', 'artist A', 'Pop'], ['song B', 'artist B', 'Pop']]

# 提取歌曲部分并打乱,直接赋值回原列表的对应位置
songs_section = playlist[1:]
random.shuffle(songs_section)
playlist[1:] = songs_section

print(playlist)

为什么这两种方法可行?

random.shuffle()是原地打乱整个列表,所以我们不能直接把整个playlist传进去。通过提取playlist[1:],我们只针对歌曲子列表进行打乱操作,再把打乱后的结果和固定在索引0的播放列表名称重新组合,就完美满足需求啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:32:14