使用 for 循环来自动化一个函数
Using a for loop to automate a function
我正在尝试使用此代码来计算特定深度的重叠部分,以在不同的深度使用。
def score(list1, list2, depth):
len_list = len(list1)
frac = numpy.ceil(depth * len_list)
frac = int(frac)
s = slice(0,frac)
list1 = list1[s]
list2 = list2[s]
return len(set(list1)&set(list2)) / float(len(set(list1) | set(list2)))
if __name__ == "__main__":
list1 = [2,4,6,8,10]
list2 = [1,2,3,4,5]
a = [numpy.arange(.01,1.01,.01)]
for i in a:
print(score(list1, list2, i))
但是,当我尝试 运行 此代码时出现错误:
frac = int(frac)
TypeError: only length-1 arrays can be converted to Python scalars
这意味着变量depth实际上是变量a的列表(即[0.01,0.02..etc])。
我该如何更正这个问题,使函数一次只接受参数 'depth' 的一个参数,而不是整个列表?
谢谢
就像凯文在评论中所说的那样,您的问题是您正在创建一个列表,其中在您的代码 a = [numpy.arange(.01,1.01,.01)]
中包含另一个列表。只需删除多余的括号即可。
我正在尝试使用此代码来计算特定深度的重叠部分,以在不同的深度使用。
def score(list1, list2, depth):
len_list = len(list1)
frac = numpy.ceil(depth * len_list)
frac = int(frac)
s = slice(0,frac)
list1 = list1[s]
list2 = list2[s]
return len(set(list1)&set(list2)) / float(len(set(list1) | set(list2)))
if __name__ == "__main__":
list1 = [2,4,6,8,10]
list2 = [1,2,3,4,5]
a = [numpy.arange(.01,1.01,.01)]
for i in a:
print(score(list1, list2, i))
但是,当我尝试 运行 此代码时出现错误:
frac = int(frac)
TypeError: only length-1 arrays can be converted to Python scalars
这意味着变量depth实际上是变量a的列表(即[0.01,0.02..etc])。
我该如何更正这个问题,使函数一次只接受参数 'depth' 的一个参数,而不是整个列表?
谢谢
就像凯文在评论中所说的那样,您的问题是您正在创建一个列表,其中在您的代码 a = [numpy.arange(.01,1.01,.01)]
中包含另一个列表。只需删除多余的括号即可。