关于随机模块的random.shuffle
方法,堆栈溢出有很多questions。
让我对shuffle
感到烦恼的一点是,它在原地洗牌而不是返回一个洗牌的副本。
请注意,shuffle适用于其中,并返回None。
因此表达式如
for index, (parent1, parent2) in enumerate(zip(sorted(population)[::2], shuffle(population)[1::2])):
不能工作。用副作用写它似乎不必要地冗长:
other_half = population[1::2]
random.shuffle(other_half)
for index, (parent1, parent2) in enumerate(zip(sorted(population)[::2], other_half):
什么是功能性改组列表的pythonic方式?
答案 0 :(得分:2)
一个很好的选择是random.sample
,其中k
是列表的len
:
import random
li = [1, 2, 3, 4, 5]
for _ in range(4): # showing we get a new, 'shuffled' list
print(random.sample(li, len(li)))
# [5, 2, 3, 1, 4]
# [1, 5, 4, 3, 2]
# [4, 2, 5, 1, 3]
# [4, 2, 3, 5, 1]
答案 1 :(得分:2)