把已经选择的元素剔除了,再做一遍 random.sample() 便可。当序列(集合)含有重复的元素时,应该使用序列下标作为 random.sample() 的参数,而不是序列本身。
请参考下面的代码
# -*- coding: utf-8 -*-
import random
team = ('1', '2', '3', '4', '5', '6', '7')
def f1():
# 方法一:(假定没有重复元素)遍历集合,将尚未选择的元素组成新集合。
r1 = random.sample(team, 3)
r2 = []
for item in team:
if item not in r1:
r2.append(item)
print('result1: %s' % random.sample(r2, 2))
def f2():
# 方法二:(假定没有重复元素)使用集合 set,计算差集。
r1 = random.sample(team, 3)
r2 = tuple(set(team) - set(r1))
print('result2: %s' % random.sample(r2, 2))
def f3():
# 方法三:(假定有重复元素)随机选择集合元素的下标,而不是元素值。
index_r1 = random.sample(range(len(team)), 3)
# r1 = [team[i] for i in index_r1]
remain_index = tuple(set(range(len(team))) - set(index_r1))
index_r2 = random.sample(remain_index, 2)
r2 = [team[i] for i in index_r2]
print('result3: %s' % r2)
if __name__ == '__main__':
f1()
f2()
f3()