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