Python 如何洗牌列表的内容并保持第一项在相同位置?

Python 如何洗牌列表的内容并保持第一项在相同位置?,python,Python,我有一个播放列表,第一个索引中有它的名字,然后是每首歌的子列表,以及它的艺术家和流派。我想洗牌的歌曲,但不改变播放列表的名称 在列表上只执行random.shuffle不起作用,因为播放列表名称也会被洗牌,我希望停留在索引0处 playlist = ['pop music', ['song A', 'artist A', 'Pop'], ['song B', 'artist B', 'Pop']] random.shuffle(playlist) 您可以使用一个片段提取列表的尾部,然后将该块传

我有一个播放列表,第一个索引中有它的名字,然后是每首歌的子列表,以及它的艺术家和流派。我想洗牌的歌曲,但不改变播放列表的名称

在列表上只执行random.shuffle不起作用,因为播放列表名称也会被洗牌,我希望停留在索引0处

playlist = ['pop music', ['song A', 'artist A', 'Pop'], ['song B', 'artist B', 'Pop']]
random.shuffle(playlist)

您可以使用一个片段提取列表的尾部,然后将该块传递到shuffle中,然后将各部分重新连接在一起:

import random

playlist = list(range(10))
tail = playlist[1:]
random.shuffle(tail)
playlist = playlist[:1] + tail
print(playlist)
shuffle是,所以使用起来有点笨拙

此外,如果您的数据结构需要一点额外的杂乱使用,您可以考虑将其重构为使用播放列表名称作为关键字的字典,以及与该播放列表相关联的组成轨道作为值列表,每一个都是轨道数据的DIST。例如:

playlists = {
    "pop": [{"artist": "Rhianna", "track": "Diamonds"}, ...],
    "black metal": [{"artist": "Burzum", "track": "Stemmen fra tårnet"}, ...],
    "children": [{"artist": "Raffi", "track": "Bananaphone"}, ...]
    ...
}

然后是ShufflePlayList[流行音乐]的问题。显然,此结构可能会很快变得复杂,这取决于您管理的数据量,但更重要的是,您需要将其设置干净。

您可以使用一个片段提取列表的尾部,然后将此块传递到shuffle,然后将各部分重新连接在一起:

import random

playlist = list(range(10))
tail = playlist[1:]
random.shuffle(tail)
playlist = playlist[:1] + tail
print(playlist)
import random
playlist = ['pop music', ['song A', 'artist A', 'Pop'], ['song B', 'artist B', 
'Pop']]
ii = 0
iii = []
x = 0
playlist1 = []
for i in playlist:
  playlist1.append(playlist[0])
  x += 1
for i in playlist1:
  g1 = random.choice(playlist)
  iii.append(g1)
  playlist.remove(g1)
  ii += 1
playlist = iii
shuffle是,所以使用起来有点笨拙

此外,如果您的数据结构需要一点额外的杂乱使用,您可以考虑将其重构为使用播放列表名称作为关键字的字典,以及与该播放列表相关联的组成轨道作为值列表,每一个都是轨道数据的DIST。例如:

playlists = {
    "pop": [{"artist": "Rhianna", "track": "Diamonds"}, ...],
    "black metal": [{"artist": "Burzum", "track": "Stemmen fra tårnet"}, ...],
    "children": [{"artist": "Raffi", "track": "Bananaphone"}, ...]
    ...
}

然后是ShufflePlayList[流行音乐]的问题。显然,此结构可能会很快变得复杂,这取决于您管理的数据量,但更重要的是,需要将其设置得干净。

以下代码是一种简单的方法。代码提取歌曲,将其洗牌,然后在原始列表中替换它们

import random
playlist = ['pop music', ['song A', 'artist A', 'Pop'], ['song B', 'artist B', 
'Pop']]
ii = 0
iii = []
x = 0
playlist1 = []
for i in playlist:
  playlist1.append(playlist[0])
  x += 1
for i in playlist1:
  g1 = random.choice(playlist)
  iii.append(g1)
  playlist.remove(g1)
  ii += 1
playlist = iii
songs = playlist[1:]  # Extracts everything in the playlist except the genre.
random.shuffle(songs)
playlist[1:] = songs  # Updates song portion of list with shuffled version.

下面的代码是执行此操作的简单方法。代码提取歌曲,将其洗牌,然后在原始列表中替换它们

songs = playlist[1:]  # Extracts everything in the playlist except the genre.
random.shuffle(songs)
playlist[1:] = songs  # Updates song portion of list with shuffled version.

我认为整洁的一行程序会使用lambda表达式:shuffled=sortedplaylist[1]、key=lambda l:random.random.insert0、playlist[0]我认为整洁的一行程序会使用lambda表达式:shuffled=sortedplaylist[1]、key=lambda l:random.random.insert0、playlist[0]Nice one@ggorlen。我喜欢为初学者提供这些答案,而不必求助于numpy、lambdas等。不错的答案@ggorlen。我喜欢这些初学者的答案,不必求助于numpy、lambdas等。这是什么?大会?——:开玩笑,这是什么?大会?——:只是开玩笑。