我正在编写 python 代码,我的问题是这段代码需要很多时间,我想知道是否有可能让它更快?我有两个元组列表如下:
Similarities = [(1, 1, 1.0),(1, 2, -0.0016),(1, 3, 0.01764),(1, 4, -0.0033),(1, 5, -0.0016),...]
和
Trust = [(2, 104, 1),(5, 1509, 1),(6, 1192, 1),(7, 1510, 1),(12, 234, 1),(15, 652, 1),...]
我的 touples 的长度Similarities = 2274064
和长度采用以下格式:Trust = 37997
(i,j,value)
如果 i 和 j 在循环范围内,我想检查元组,函数将它们的值返回给循环,检查后,如果这些值存在或不存在,将计算 d。然后将 d 的数量附加到二维数组中。
现在我想运行下面的代码:
totalDistance=[]
totalSim=[]
for i in range(1642):
totalDistance.append([])
totalSim.append([])
for j in range(1642):
//search in Trust list to find value of trust i and j
tr=calcTrustDif(i,j)
//search in Similarities list to find value of similarity i and j
pc=calcPccDif(i,j)
if tr and pc:
d=math.sqrt(pow(pc,2)+pow(tr,2))
elif tr and not(pc):
d=tr
elif pc and not(tr):
d=pc
else:
d=3
totalSim[i].append(1-d)
totalDistance[i].append(d)
def calcTrustDif(i,j):
tr=[t for t in Trust if t[0]== i and t[1]==j]
if tr:
return tr[0][2]
else:
pass
def calcPccDif(i,j):
pc=[t for t in Similarities if t[0]== i and t[1]==j]
if pc:
return 1-pc[0][2]
else:
pass
我估计,我发现这段代码需要 82 小时,而且非常糟糕......有人可以帮我减少运行时间吗?我认为对于这种我不知道的情况,python 具有神奇的功能。