您好我一直在寻找最小的多维列表,但如果我有一个N x N x 4列表,我如何获得每个第4个元素之间的最小值?所有其他示例都是使用实际索引的小示例列表。我想我需要用N ....来定义指数。
[[[0,1,2,3],[0,1,2,3],...N],[[0,1,2,3],[0,1,2,3],...N].....N]
然后检索他们的指数。
我不知道该尝试什么。
如果有人对实际代码感兴趣:
relative = [[[[100] for k in range(5)] for j in range(N)] for i in range(N)]
以下内容是用满足数学方程的时间填充第4个元素。 relative
的第0,第1,第2和第3个元素具有位置和速度。第4个点是i和第j个粒子碰撞所花费的时间(ii或ji等冗余值用100填充(因为它足够大,min函数不能检索它).I需要最短的碰撞时间(因此第四元素比较)
def time(relative):
i = 0
t = 0
while i<N:
j = i+1
while j<N and i<N:
rv = relative[i][j][0]*relative[i][j][2]+relative[i][j][1]*relative[i][j][3] #Dot product of r and v
if rv<0:
rsquared = (relative[i][j][0])**2+(relative[i][j][1])**2
vsquared = (relative[i][j][2])**2+(relative[i][j][3])**2
det = (rv)**2-vsquared*(rsquared-diameter**2)
if det<0:
t = 100 #For negative times, assign an arbitrarily large number to make sure min() wont pick it up.
elif det == 0:
t = -rv/vsquared
elif det>0:
t1 = (-rv+sqrt((rv)**2-vsquared*(rsquared-diameter**2)))/(vsquared)
t2 = (-rv-sqrt((rv)**2-vsquared*(rsquared-diameter**2)))/(vsquared)
if t1-t2>0:
t = t2
elif t1-t2<0:
t = t1
elif rv>=0:
t = 100
relative[i][j][4]=t #Put the times inside the relative list for element ij.
j = j+1
i = i+1
return relative
我试过了:
t_fin = min(relative[i in range(0,N-1)][j in range(0,N-1)][4])
哪个编译但总是返回100,即使我已经检查过它不是最小元素。
答案 0 :(得分:0)
如果你想要NxNx4列表第4个元素的min
,
min([x[3] for lev1 in relative for x in lev1])