max([ (L[i], i) for i in range(len(L)) ])返回的是一个tuple(元组),其中第二个元素是索引值,需要“解压”到变量中才能作索引值;
下面是改进你好友的方法:
[code="python"]
x =[0,822,8,16]
y = Photo.objects.all()[:len(x)]
xylist = zip(x,y)
xylist.sort(reverse=True) #由大到小排序,xylit[0]最大,递减
[/code]
关于你说的“希望次要 接近的也可以顯示出來”,我给出几个实现方案
1.若很固定的显示几个这比较容易,只要[code="python"]
def select(xylist, n):
return xylist[:n]
[/code]
2.设定一个阈值,其他的比较数与最大的匹配数小于这个阈值时,认为是接近的
[code="python"]
def select(xylist, val):
max = xylist[0][0]
xylist = [x for x in xylist if(max-x[0])
[/code]
说明下,第一个方案时必须先由大到小排序,第二个方案不必排序。元素取完之后,xylist列表元素的形式与下面类似
[code="python"]
[(822,),(16,)]#xylist的长度跟给的参数有关
[/code]
我们可以通过这种方式取第一个图片的地址:xylist[0][1].pgm_url.
上面给出的两个方案都硬性规定了参数,参数可以动态产生,这跟实际应用有关,你可以根据自己的需要再编写合适的函数