有没有一种方法可以防止列表中的对象多次打印?

时间:2020-10-17 16:11:08

标签: python random

因此,我正在创建一个python代码,以从列表中所有问题中随机选择一个问题。当我运行代码时,它从大约200个问题的列表中随机选择一个问题,并显示给我。我想回答这个问题,然后继续下一个。但是,我不想在回答完同样的问题后再听到同样的问题。有什么方法可以确保问题一旦被打印出来,就从列表中删除,从而使其不再出现?因为我本来可以回答一个问题,但必须先回答其他多个问题,然后再回答未回答的特定问题。那么有没有办法确保没有一个问题可以打印一次以上呢?(我不想使用random.sample k = 200来打印所有问题,因为我不想知道接下来要问什么。)任何回应将不胜感激。

我的代码当前如下所示: 随机导入

问题= [ “定义数学”, “定义法语”, '定义英语', ]

结果= random.sample(问题,k = 1) 打印(结果)

除了200个问题

4 个答案:

答案 0 :(得分:1)

我认为您可能想要my_list.pop(index)来删除index处的项目并返回它(因此,如果您不想完全抛出问题,可以将结果附加到另一个列表中)

答案 1 :(得分:1)

您可以使用random.randrange()从列表中随机选择项目。完成该项目后,您可以将其从列表中删除。

重复直到列表为空。

import random

questions = [
    'define math',
    'define french',
    'define english',
    'define spanish',
    'define czech',
    'define slovak',
    'define whatever',
]

while questions:
    # Select random index from the remaining list.
    index = random.randrange(0, len(questions))

    # Do whatever you want with the selected item.
    selected = questions[index]
    print(selected)

    # Remove the just-selected item from the list using its known index.
    questions.pop(index)

输出:

define whatever
define english
define slovak
define spanish
define czech
define french
define math

答案 2 :(得分:0)

肯定会这样:

if not x in myList:
  myList.append(x)

其中x是随机数。其他技巧是稍后将列表转换为设置并返回列表:

myList = list(set(myList))

根据您的需要:

import random 
questions= [ 'define math', 'define french', 'define english'] 
results = random.sample(questions, k=1) 
if results not in questions:
  questions.append(results)

print(questions)

答案 3 :(得分:0)

还有一种简单地创建排列的方法,可以保证在接下来的N个选择中,所有N个问题都被选择,并且可能比纯python方法快得多:

import numpy as np
N=len(sample)
random_order=np.random.permutation(N)
for i in random_order:
    next_question=question[i]