尝试匹配两个列表中的索引时出现值错误

时间:2013-10-28 22:32:26

标签: python list indexing

我正在尝试用Python编写一些简单的抽认卡(仍在学习!)。

我可以在一个文本文件中读取,分成两个列表(关键字和定义),找到一个随机关键字(chosenKeyword)并从关键字列表中返回关键字及其索引值但是当我尝试使用那个索引值(在第二个列表中将与我在同一时间逐行读取它们完全相同)以匹配定义列表我不断得到ValueError告诉我该项目不是在列表中(当我手动检查时)。问题出在我的possibleAnswers函数中,但我无法弄清楚它是什么 - 任何帮助都会很棒。

# declare an empty list for answers
answers = []

if keyword.index(chosenKey) == define.index(chosenKey):
    answers.append()
else:
    pass


# find the matching definition for the keyword and add to the answer list

wrongAnswers = random.sample(define,2)
while define.index(chosenKey) != wrongAnswers:
    answers.append(wrongAnswers)
    print(answers)

2 个答案:

答案 0 :(得分:1)

list.index()返回列表中给定的索引:

>>> ['spam', 'ham', 'eggs'].index('ham')
1

但在列表中找不到该项时会引发ValueError

>>> ['spam', 'ham', 'eggs'].index('monty')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 'monty' is not in list

如果你有索引,只需在列表中使用索引:

>>> ['spam', 'ham', 'eggs'][1]
'ham'

如果您想配对两个列表的元素,请改用zip() function

for kw, definition in zip(keyword, define):
    if kw == definition:
        # the values match at the same index.

答案 1 :(得分:0)

我认为您在显示的代码中存在一些问题

这是第一个:

if keywords.index(chosenKey) == definitions.index(chosenKey):

据我所知您想在答案列表中添加正确的答案。

我会这样做:

if chosenKey in keywords:
    answers.append(definitions[keywords.index(chosenKey)])
else:
    pass

第二部分似乎有人试图得到两个随机选项,其中一个应该是正确答案

wrongAnswers = random.sample(define,2)
while definitions[keywords.index(chosenKey)] not in wrongAnswers:        
    wrongAnswers = random.sample(define,2)
answers = wrongAnswers
print(answers)