为什么random.sample()会为采样的项添加方括号和单引号?

时间:2017-05-20 16:26:09

标签: python-2.7 dictionary random

我正在尝试从列表中对项目(字典中的一个键)进行采样,然后使用该项目的索引来查找其对应的值(在同一个字典中)。

questions= list(capitals.keys())
answers= list(capitals.values())
for q in range(10):
    queswrite = random.sample(questions,1)
    number = questions.index(queswrite)
    crtans = answers[number]

在这里,大写字母是最初的行为,其中状态(键)和大写字母(值)正在被采样。

但是,显然random.sample()方法将方括号和单引号添加到采样项中,从而防止它被用于引用包含相应值的列表。

  

追踪(最近一次呼叫最后一次):

     

文件“F:\ test.py”,第30行,in      

number = questions.index(queswrite)

     

ValueError:['Delaware']不在列表中

我该如何防止这种情况?

1 个答案:

答案 0 :(得分:1)

random.sample()会返回列表,其中包含您请求的元素数量。请参阅documentation

  

返回从总体序列或集合中选择的唯一元素的 k 长度列表。用于无需替换的随机抽样。

如果您只想选择一个元素,则不需要样本,但是您只想选择一个。为此,您可以使用random.choice() function代替:

question = random.choice(questions)

但是,鉴于您使用的是循环,您可能真的想获得 10个独特的问题。不要在range(10)上使用循环,而是选择10个随机问题的样本。这正是random.sample()将为您做的事情:

for question in random.sample(questions, 10):
    # pick the answer for this question.

接下来,将两个键和值放入两个单独的列表中,然后使用一个索引查找另一个列表...效率低且不必要;您选择的密钥可以直接用 来查找答案:

questions = list(capitals)
for question in random.sample(questions, 10):
    crtans = capitals[question]