Python 测试列表与测试列表
我知道列表和列表还有其他线程,但它们似乎没有解决我的问题。我试着对照一个特定的列表测试一系列列表,并检查它们有多相似。比如说, “应答键”如下所示:Python 测试列表与测试列表,python,list,Python,List,我知道列表和列表还有其他线程,但它们似乎没有解决我的问题。我试着对照一个特定的列表测试一系列列表,并检查它们有多相似。比如说, “应答键”如下所示: answerkey = "B,A,D,D,C,B,D,A,C,C,D,B,A,B,A,C,B,D,A,C,A,A,B,D,D" lanswerkey = list[answerkey] 我正在尝试测试我正在导入的一系列其他列表,其格式如下: N00000023,,A,D,D,C,B,D,A,C,C,,C,,B,A,C,B,D,A,C,A,A N
answerkey = "B,A,D,D,C,B,D,A,C,C,D,B,A,B,A,C,B,D,A,C,A,A,B,D,D"
lanswerkey = list[answerkey]
我正在尝试测试我正在导入的一系列其他列表,其格式如下:
N00000023,,A,D,D,C,B,D,A,C,C,,C,,B,A,C,B,D,A,C,A,A
N00000024,C,C,D,D,C,B,,A,C,C,D,B,A,B,,C,B,D,A,C,A,B,B,,D
我可以这样做吗
right = 0
counter3 = 0
for line in f:
if lanswerkey.split(",")[counter3] == line.split(",")[counter3]:
right += 4
if lanswerkey.split(",")[counter3] != line.split(",")[counter3]:
right -= 1
counter3 += 1
任何帮助都将不胜感激 首先,从答案键获取答案列表
>>> answerkey = answerkey.split(",")
['B', 'A', 'D', 'D', 'C', 'B', 'D', 'A', 'C', 'C', 'D', 'B', 'A', 'B',
'A', 'C', 'B', 'D', 'A', 'C', 'A', 'A', 'B', 'D', 'D']
然后读答案:
>>> answer = raw_input().split(",")[1:]
N00000023,,A,D,D,C,B,D,A,C,C,,C,,B,A,C,B,D,A,C,A,A
['', 'A', 'D', 'D', 'C', 'B', 'D', 'A', 'C', 'C', '', 'C', '', 'B', 'A', 'C', 'B', 'D', 'A', 'C', 'A', 'A']
for i in range(len(answerkey)):
if answerkey[i] == answer[i]:
right += 4
else
right -= 1
最后,比较答案:
>>> answer = raw_input().split(",")[1:]
N00000023,,A,D,D,C,B,D,A,C,C,,C,,B,A,C,B,D,A,C,A,A
['', 'A', 'D', 'D', 'C', 'B', 'D', 'A', 'C', 'C', '', 'C', '', 'B', 'A', 'C', 'B', 'D', 'A', 'C', 'A', 'A']
for i in range(len(answerkey)):
if answerkey[i] == answer[i]:
right += 4
else
right -= 1
如果不想使用for循环,可以查看numpy库,它提供了元素级比较功能。
首先,从答案键获取答案列表
>>> answerkey = answerkey.split(",")
['B', 'A', 'D', 'D', 'C', 'B', 'D', 'A', 'C', 'C', 'D', 'B', 'A', 'B',
'A', 'C', 'B', 'D', 'A', 'C', 'A', 'A', 'B', 'D', 'D']
然后读答案:
>>> answer = raw_input().split(",")[1:]
N00000023,,A,D,D,C,B,D,A,C,C,,C,,B,A,C,B,D,A,C,A,A
['', 'A', 'D', 'D', 'C', 'B', 'D', 'A', 'C', 'C', '', 'C', '', 'B', 'A', 'C', 'B', 'D', 'A', 'C', 'A', 'A']
for i in range(len(answerkey)):
if answerkey[i] == answer[i]:
right += 4
else
right -= 1
最后,比较答案:
>>> answer = raw_input().split(",")[1:]
N00000023,,A,D,D,C,B,D,A,C,C,,C,,B,A,C,B,D,A,C,A,A
['', 'A', 'D', 'D', 'C', 'B', 'D', 'A', 'C', 'C', '', 'C', '', 'B', 'A', 'C', 'B', 'D', 'A', 'C', 'A', 'A']
for i in range(len(answerkey)):
if answerkey[i] == answer[i]:
right += 4
else
right -= 1
如果不想使用for循环,可以查看numpy库,它提供了元素级比较功能。
如果您有
answerkey = "B,A,D,D,C,B,D,A,C,C,D,B,A,B,A,C,B,D,A,C,A,A,B,D,D"
answer = "N00000024,B,B,D,D,C,A,D,A,C,D,D,B,A,B,A,C,B,D,A,C,A,A,B,D,D"
# different ^ ^ ^
您可以获得如下不同位置的数量:
len([x for x in zip(answerkey.split(","), answer.split(",")[1:]) if x[0] != x[1]])
# result 3
如果你有
answerkey = "B,A,D,D,C,B,D,A,C,C,D,B,A,B,A,C,B,D,A,C,A,A,B,D,D"
answer = "N00000024,B,B,D,D,C,A,D,A,C,D,D,B,A,B,A,C,B,D,A,C,A,A,B,D,D"
# different ^ ^ ^
您可以获得如下不同位置的数量:
len([x for x in zip(answerkey.split(","), answer.split(",")[1:]) if x[0] != x[1]])
# result 3
在numpy中,您可以轻松比较两个符号为
==
的数组,唯一的问题是您需要两个长度相同的数组,您可以通过设置自己的规则轻松处理这一问题。在您的情况下,answerkey
有25个元素,而line1
只有22个元素,因此您无法与它们进行比较,请自行设置规则
import numpy as np
answerkey = "B,A,D,D,C,B,D,A,C,C,D,B,A,B,A,C,B,D,A,C,A,A,B,D,D"
line1 = "N00000023,,A,D,D,C,B,D,A,C,C,,C,,B,A,C,B,D,A,C,A,A"
line2 = "N00000024,C,C,D,D,C,B,,A,C,C,D,B,A,B,,C,B,D,A,C,A,B,B,,D"
# convert your lists to numpy array
answer = np.array(list(answerkey.split(",")))
q1 = np.array(list(line1.split(","))[1:]) # [1:] just to get rid of the "N00000023"
q2 = np.array(list(line2.split(","))[1:])
# print your array length to check whether they are comparable
print len(answer), len(q1), len(q2)
>> 25 22 25
# get your result array
res = answer == q2
>> [False False True True True True False True
True True True True True True False True True
True True True True False True False True]
# calculate your score
score = sum(res)*4 - (len(res)-sum(res))
print score
>> 70
在numpy中,您可以轻松比较两个符号为
==
的数组,唯一的问题是您需要两个长度相同的数组,您可以通过设置自己的规则轻松处理这一问题。在您的情况下,answerkey
有25个元素,而line1
只有22个元素,因此您无法与它们进行比较,请自行设置规则
import numpy as np
answerkey = "B,A,D,D,C,B,D,A,C,C,D,B,A,B,A,C,B,D,A,C,A,A,B,D,D"
line1 = "N00000023,,A,D,D,C,B,D,A,C,C,,C,,B,A,C,B,D,A,C,A,A"
line2 = "N00000024,C,C,D,D,C,B,,A,C,C,D,B,A,B,,C,B,D,A,C,A,B,B,,D"
# convert your lists to numpy array
answer = np.array(list(answerkey.split(",")))
q1 = np.array(list(line1.split(","))[1:]) # [1:] just to get rid of the "N00000023"
q2 = np.array(list(line2.split(","))[1:])
# print your array length to check whether they are comparable
print len(answer), len(q1), len(q2)
>> 25 22 25
# get your result array
res = answer == q2
>> [False False True True True True False True
True True True True True True False True True
True True True True False True False True]
# calculate your score
score = sum(res)*4 - (len(res)-sum(res))
print score
>> 70
您对“相似”的衡量标准是什么?@DisplayName抱歉,我的意思是测试一个对另一个的准确性,在这种情况下,“answerkey”是正确的答案,其他列表是我对“answerkey”的测试,以便稍后计算分数。您能更具体一点吗?您想要使用什么样的确切逻辑来比较两个列表?@DisplayName例如,如果“answerkey”中的第三项是“B”,而另一个列表中的第三项是“C”,则这将是不正确的。就像给多项选择题评分一样。你对“相似”的衡量是什么?@DisplayName抱歉,我的意思是测试一个对另一个的准确性,在这种情况下,“answerkey”是正确的答案,其他列表是我对“answerkey”的测试,以便以后计算分数。你能更具体一点吗?您想要使用什么样的确切逻辑来比较两个列表?@DisplayName例如,如果“answerkey”中的第三项是“B”,而另一个列表中的第三项是“C”,则这将是不正确的。就像给多项选择题评分一样。对于numpy one,要得到你想要的分数,只需使用:
result=equal(a,b)
score=sum(result)*5-len(result)
对于numpy one,要得到你想要的分数,只需使用:result=equal(a,b)
score=sum(result)*5-len(result)
谢谢!在这种情况下,如何去掉列表开头的“N00000024”?我已经编辑了答案。使用<代码> [ 1:] /代码>不考虑列表中的第一个项目。@ DISPLAYND用户列表中的第一个条目<代码> N900000 23,A、D、D、C、B、D、A、C、C、B、A、C、B、D、A、C、A、A < /C> >与