比较两个列表python的程序

时间:2015-01-14 15:35:29

标签: python

程序从python中读取一组答案。 l_answers 将是正确的。 l_rscore 将是从文件中读取的答案,现在已编入索引列表。

如果我想相互比较(list [0] || list2 [0])并检查正确答案和错误答案的数量,我需要知道如何继续。

目前的方法不起作用,没有回溯。它只是保持计算,永无止境。

def main():

    l_answers = [['B', 'D', 'A', 'A', 'C'],
                 ['A', 'B', 'A', 'C', 'D'],
                 ['B', 'C', 'D', 'A', 'D'],
                 ['C', 'C', 'B', 'D', 'A']]

    l_rscore = read_file()    
    result = get_result(l_answers, l_rscore)
    print result

def read_file():
    rows = 4
    colums = 5
    l_results = []

    input_file = open('answers.txt', 'r')

    for r in range(rows):
        for c in range(colums):
            for line in input_file:
                l_results.append(line.strip())

    return l_results

def get_result(l, l_2):

    correct = 0
    index = 0
    while index < len(l):
        if l_2[index] == l[index]:
            correct += 1
            index += 1
    return correct

main()

4 个答案:

答案 0 :(得分:2)

get_result中有一个无限循环,在你增加index之前你有一个条件,而这个条件并不总是成立。

一般,如果您有两个列表,其中一个是答案,另一个是建议(具有相同的顺序) - 您可以使用zip一起处理它们:

def compare_answers(suggestions, answers):
    # pair what was answered with what's true
    pairs = zip(suggestions, answers)
    # summarize scores - 1 for each correct answer
    return sum(i == j for i, j in pairs)

注意:True添加到某个数字时,会将其视为1(False为0)。所以sum给出了数字(默认值从0开始)。

答案 1 :(得分:2)

您可以展平两个列表并通过列表理解进行比较。

def get_results(l, l2):

    lflat  = [i for sublist in l for i in sublist]
    l2flat = [i for sublist in l2 for i in sublist]

    return sum(i[0] == i[1] for i in zip(lflat, l2flat))

答案 2 :(得分:1)

你的无限循环就在这里:

index = 0
while index < len(l):
    if l_2[index] == l[index]:
        correct += 1
        index += 1

如果第一个答案彼此不相等,则索引永远不会增加,而while循环会继续迭代,卡在第一个答案上。

答案 3 :(得分:0)

首先,您需要像input_file = open('answers.txt', 'r').read()那样读取文件,然后必须将其解析为嵌套列表。其次,你底部的循环应该是:

while index < len(l):
    if l_2[index] == l[index]:
        correct += 1
    index += 1

编辑:如果您的文件被写为列表列表,您可以像这样轻松地构建列表,将包含的字符串作为列表进行评估。

input_file = eval(open('answers.txt', 'r').read())