是否有更快的方法来计算两个元组列表中匹配的第二个元素的数量?
我有这样的元组,我基本上是一次一个元组循环:
lstup1 = [('but', '00004722-r'), ('he', '000000NULL'), ('was', '02697725-v'), ('always', '00020280-r'), ('persuade', '00766418-v'), ('out', '02061487-a')]
lstup2 = [(u'But', u'000000NULL'), (u'he', u'000000NULL'), (u'was', u'000000NULL'), (u'always', u'00019339-r'), (u'persuade', u'00766418-v'), (u'out', u'00232862-r')]
for i,j in izip(lstup1,lstup2):
if i[1] == j[1]:
correct+=1
if j[1][-4:] == "NULL"
null+=1
count+=1
print "Accuracy =", str(correct/count), "with", str(null), "NULL tags"
答案 0 :(得分:1)
你可以使用numpy:
>>> import numpy as np
>>> lstup1 = [('but', '00004722-r'), ('he', '000000NULL'), ('was', '02697725-v'), ('always', '00020280-r'), ('persuade', '00766418-v'), ('out', '02061487-a')]
>>> lstup2 = [(u'But', u'000000NULL'), (u'he', u'000000NULL'), (u'was', u'000000NULL'), (u'always', u'00019339-r'), (u'persuade', u'00766418-v'), (u'out', u'00232862-r')]
>>>
>>> npl1 = np.array(lstup1)
>>> npl2 = np.array(lstup2)
>>> npl1[:,1] == npl2[:,1]
array([False, True, False, False, True, False], dtype=bool)
如果你只想知道平等对的数量:
>>> np.sum(npl1[:,1] == npl2[:,1])
2
如果您想知道索引位置:
>>> np.where(npl1[:,1] == npl2[:,1])
(array([1, 4]),)
答案 1 :(得分:1)
您可以在此处使用sets
:
In [5]: se1=set(x[1] for x in lstup1)
In [6]: se2=set(x[1] for x in lstup2)
In [7]: len(se1&se2)
Out[7]: 2
交叉的时间复杂度:O(min(len(se1), len(se2))
集合创建的时间复杂度:O(L)
,其中L
是列表的长度
或者只比较同一索引上的项目的izip()
版本可以简化为:
sum(i[1]==j[1] for i,j in izip(lstup1,lstup2))