显而易见的方式 – 转换为列表.
batch = random.sample(list(my_deque), batch_size))
但是你可以避免创建一个完整的列表.
idx_batch = set(sample(range(len(my_deque)), batch_size))
batch = [val for i, val in enumerate(my_deque) if i in idx_batch]
附: (编辑)的
实际上,random.sample应该可以在Python> = 3.5中使用deques.因为类已更新以匹配Sequence接口.
In [3]: deq = collections.deque(range(100))
In [4]: random.sample(deq, 10)
Out[4]: [12, 64, 84, 77, 99, 69, 1, 93, 82, 35]
注意!正如Geoffrey Irving在下面的评论中正确指出的那样,你最好将队列转换成一个列表,因为队列被实现为链表,使每个索引访问O(n)的队列大小,因此随机抽样m值将花费O(m * n)时间.