显示随机选择(Python)

3zz*_*zzy 2 python random list limit

我有一个列表[]项目,我想从中随机显示一个,但显示的项目不能在最后x个请求中重复多次.

  1. list1 = item1,item2,item3,item4,item5,item6,item7,item8,item9,item 10
  2. 显示上面列表中的随机选择
  3. list2 =存储list2中最后显示的项目,该项目应仅存储7个项目,而不是更多项目
  4. 显示列表中的随机选择,但请确保它在list2中不存在

这是正确的方法吗?无论哪种方式,我想知道如何限制列表只存储7项?

谢谢

Cra*_*ast 7

collections.deque是python中唯一自然支持有界的序列类型(仅在Python 2.6及更高版本中).如果使用python 2.6或更新:

# Setup
from collections import deque
from random import choice
used = deque(maxlen=7)

# Now your sampling bit
item = random.choice([x for x in list1 if x not in used])
used.append(item)
Run Code Online (Sandbox Code Playgroud)

如果使用python 2.5或更低版本,则无法使用maxlen参数,并且需要再执行一次操作来切断双端队列的前端:

while len(used) > 7:
    used.popleft()
Run Code Online (Sandbox Code Playgroud)

这不是最有效的方法,但它有效.如果您需要速度,并且您的对象是可清除的(大多数不可变类型),请考虑使用字典作为"已使用"列表.

此外,如果您只需要执行一次,则random.shuffle方法也可以.