[英]Python random sample with exception
我正在尝试创建myList
的示例,但i_
除外。
我的尝试:
i_ = 'd'
myList = ['a','b','c','d','e']
myList = random.sample(myList, 3)
尽管上述示例工作正常,但仍有可能将i_
从myList
删除。
我想创建一个没有删除i_
值的示例。
期望输出:
包含 3 个项目(包括i_
任何列表输出,例如:
['a','d','e']
只需从没有i_
的列表中抽取 2 个值,然后插入i_
:
new_list = random.sample([i for i in myList if i != i_], 2)
new_list.insert(random.randrange(0, 3), i_)
但这假设i_
在您的列表中仅出现一次 - 考虑到您的示例,这似乎是合理的,但为了完整起见,我想提及这一点。 另外,如果列表中有多个i_
,我不确定想要的结果应该是什么。
您还可以使用 hit&miss 方法来生成样本,直到得到包含i_
的样本:
new_list = []
while i_ not in new_list:
new_list = random.sample(myList, 3)
请注意,如果i_
不太可能在样本中绘制,这可能会非常慢。 对于 5 个元素的 3 个样本,它非常快,但如果您从 1000 个元素中抽取 3 个样本,它可能会非常慢。
保证i_
将在列表中,然后少取一个随机元素。
myList.remove(i_)
myList = random.sample(myList, 2)
myList.append(i_)
如果您愿意,您可以将它们合并为一行。
如果需要“一个班轮”,那么您可以将切片i_
内联出myList
并随机抽取 2 个样本,添加i_
和 'shuffle' 与文档中的sample(x, k=len(x))
内联
用换行符书写
i_ = 'd'
myList = ['a','b','c','d','e']
random.sample(random.sample(myList[:myList.index(i_)] +
myList[(myList.index(i_) + 1):],
2)
+ [i_], k=3)
['c', 'd', 'b']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.