我尝试创建myList
的样本,但i_
除外。
我的尝试:
i_ = 'd'
myList = ['a','b','c','d','e']
myList = random.sample(myList, 3)
虽然上述示例工作正常,但仍有可能i_
移除myList
。
我想创建一个不删除i_
值的示例。
所需的输出:
任何包含3个项目的列表输出,包括i_
,例如:
['a','d','e']
答案 0 :(得分:5)
只需从列表中抽取2个值而不使用/./ - Any character except a newline.
/./m - Any character (the m modifier enables multiline mode)
,然后再插入i_
:
i_
但是这假设new_list = random.sample([i for i in myList if i != i_], 2)
new_list.insert(random.randrange(0, 3), i_)
在您的列表中只出现一次 - 在您的示例中似乎是合理的,但我想提及这一点是为了完整性。如果列表中有多个i_
,我也不确定所需的结果是什么。
您还可以使用生成样本的命中和遗漏方法,直到您获得包含i_
的样本:
i_
请注意,如果样本中不可能绘制new_list = []
while i_ not in new_list:
new_list = random.sample(myList, 3)
,这可能会非常慢。对于5个元素的3个样本,它非常快,但如果你从1000个元素中抽取3个样本,它可能非常慢。
答案 1 :(得分:2)
保证i_
将在列表中,然后减少一个随机元素。
myList.remove(i_)
myList = random.sample(myList, 2)
myList.append(i_)
如果您愿意,可以将这些组合成一行。
答案 2 :(得分:0)
如果需要“一个班轮”,那么您可以从i_
中内联切片myList
并获取2个随机样本,添加i_
和'shuffle',与{{1}内联来自文档
用换行符写
sample(x, k=len(x))