我有一个函数来计算两个解析字符串的jaccard索引。该功能正常,其代码如下:
def jack(a,b):
x=a.split()
y=b.split()
k=float(len(list(set(x)&set(y))))/float(len(list(set(x) | set(y))))
return k
但是,当我想将该函数应用于列表的任何两个元素时,会出现错误。我的名单叫做“a”,就像这样:[[“Coca Cola”],[“Coca Sc”]]。错误消息是:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-51-0d7031267380> in <module>()
----> 1 jack(a[2],a[3])
<ipython-input-27-256123b04a44> in jack(a, b)
1 def jack(a,b):
----> 2 x=a.split()
3 y=b.split()
4 k=float(len(list(set(x)&set(y))))/float(len(list(set(x) | set(y))))
5 return k
AttributeError: 'list' object has no attribute 'split'
我知道这是因为[2]也是一个列表,但我想找到一种方法来处理这个以获得预期的输出。也许我可以修改我的功能或输入输出的方式。
答案 0 :(得分:2)
由于您有一个元素列表,并且您将列表作为参数传递,而您的函数需要字符串,我建议您像这样调用您的函数
jack(a[2][0], a[3][0])
此外,您无需将set
转换为list
即可找到长度。
return float(len(set(x) & set(y))) / float(len(set(x) | set(y)))
应该就够了。
答案 1 :(得分:1)
这是因为你的变量a
是一个嵌套列表。您应该展平a
或将参数传递为:
jack(a[2][0],a[3][0])
a = [i[0] for i in a]
然后你可以很容易地做到:
jack(a[0],a[1])