Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 测试列表与测试列表_Python_List - Fatal编程技术网

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> >与 ActhReSyKEY < /代码>没有相同的长度。在这种情况下会产生什么结果?丢失的字母如何算作分数?在你的方法中,丢失的答案将被视为错误答案,我认为这是正确的行为。谢谢!在这种情况下,如何去掉列表开头的“N00000024”?我已经编辑了答案。使用<代码> [ 1:] /代码>不考虑列表中的第一个项目。@ DISPLAYND用户列表中的第一个条目<代码> N900000 23,A、D、D、C、B、D、A、C、C、B、A、C、B、D、A、C、A、A < /C> >与 ActhReSyKEY < /代码>没有相同的长度。在这种情况下会产生什么结果?缺失的字母如何算作分数?在你的方法中,缺失的答案将被视为错误的答案,我认为这是正确的行为。