繁体   English   中英

Python随机样本异常

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM