针对列表的测试列表

时间:2016-05-02 07:09:49

标签: 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
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

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:2)

在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

答案 1 :(得分:1)

如果你有

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

答案 2 :(得分:0)

首先,从答案键获取答案列表。

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

如果你不想使用for循环,你可以看看 numpy 库,它提供了元素明智比较的功能。 http://docs.scipy.org/doc/numpy/reference/generated/numpy.equal.html#numpy.equal