小白求助:python显示随机后剩余的元素

新手上路,请多包涵

我想用python实现如下一个需求,请大神帮忙:
一个序列:
team=('1','2','3','4','5','6','7')
随机选择3个:
r=random.sample(team,3)
我还想在随机后剩下的元素里再随机选择2个,这个怎么实现呀?
请大神帮忙忙,十分感谢

阅读 7.9k
2 个回答

把已经选择的元素剔除了,再做一遍 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()

这个问题其实算是一个伪需求,先随机3个再在余下的元素里随机2个,其实等同于随机5个,先取3个再取2个

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题