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方法也可以.