Python 比较两个列表的程序

Python 比较两个列表的程序,python,Python,程序从python中读取一组答案。l_的答案应该是正确的。l_rscore是从文件中读取的答案,现在索引到列表中 我需要知道,如果我想相互比较(列表[0]| |列表2[0]),并检查正确答案和错误答案的数量,我将如何继续 当前的方法不起作用,无法回溯。它只是保持“计算”,永远不会结束 def main(): l_answers = [['B', 'D', 'A', 'A', 'C'], ['A', 'B', 'A', 'C', 'D'],

程序从python中读取一组答案。l_的答案应该是正确的。l_rscore是从文件中读取的答案,现在索引到列表中

我需要知道,如果我想相互比较(列表[0]| |列表2[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()
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=读取文件()
结果=获取结果(l_答案,l_分数)
打印结果
def read_文件():
行数=4
柱=5
l_结果=[]
input_file=open('answers.txt','r')
对于范围内的r(行):
对于范围内的c(柱):
对于输入_文件中的行:
l_results.append(line.strip())
返回l_结果
def get_结果(l,l_2):
正确=0
索引=0
当指数
您的无限循环就在这里:

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

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

您的无限循环就在这里:

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

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

get\u result
中有一个无限循环,在该循环中,在增加
索引之前有一个条件,但该条件并不总是保持不变

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

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
为我们提供了一个数字(sum默认从0开始)。

get\u result
中有一个无限循环,在增加
索引之前有一个条件,但该条件并不总是成立

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

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
为我们提供了数字(sum默认从0开始)。

您可以将两个列表展平,并通过列表理解对它们进行比较

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))

您可以将两个列表展平,并通过列表理解对它们进行比较

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))

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

while index < len(l):
    if l_2[index] == l[index]:
        correct += 1
    index += 1
索引
编辑:如果您的文件是以列表的形式编写的,那么您可以像这样轻松地构造一个列表,将包含的字符串作为列表进行计算


input\u file=eval(open('answers.txt','r').read())

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

while index < len(l):
    if l_2[index] == l[index]:
        correct += 1
    index += 1
索引
编辑:如果您的文件是以列表的形式编写的,那么您可以像这样轻松地构造一个列表,将包含的字符串作为列表进行计算


input\u file=eval(open('answers.txt','r').read())

我认为你不可能像那样重复
input\u file
多次。不确定你的意思是什么。一旦你迭代一个file对象,它就会变得精疲力竭;再次迭代将得到零行。所以在另一个循环中有一个
for行:
是不正确的,因为它只会在第一次遍历时给你值。不管怎样,这个三重for循环应该做什么?它应该把列表的每一位都放在正确的位置,至少我是这么看的。所以,假设答案B在第0行第0列。我不认为你可以像那样反复迭代
input\u file
多次。不确定你的意思。一旦你迭代一个file对象,它就会变得精疲力竭;再次迭代将得到零行。所以在另一个循环中有一个
for行:
是不正确的,因为它只会在第一次遍历时给你值。不管怎样,这个三重for循环应该做什么?它应该把列表的每一位都放在正确的位置,至少我是这么看的。那么,假设答案B在第0行第0列。我知道了,你有什么建议,我如何排列我的第二个列表,以便它能立即将它们与每个值进行比较?我知道,你有什么建议,我如何排列我的第二个列表,以便它能立即将它们与每个值进行比较?不需要map/lambda:
sum(I==j表示zip(l,l2)中的I,j)
sufficient@fredtantini没想到,谢谢!:)这是因为
True
在技术上是
1
当将其添加到0(编辑)时,对吗?不需要映射/lambda:
sum(i==j代表i,j在zip(l,l2)中))
issufficient@fredtantini没想到,谢谢!:)这就是为什么将
True
添加到0(编辑)时,从技术上讲是
1
,对吗?