如何打乱播放列表的歌曲子列表且保留首元素位置不变?
解决方案:固定播放列表名称,仅打乱歌曲顺序
这问题我碰到过好多次了!直接调用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
相关产品推荐
相关产品推荐

