首页 > 解决方案 > 如何在某些条件下从某些列表中获取最大值?

问题描述

list1 = [140,232,857,273,405,374,1234,394,1803]
u = 0
b = 4
for i in list1[u:b]
   u+= 4
   u+= 4
   print(max(i))

现在我想从该列表中获取最大值,但只能从 list1[0:4] 中获取并继续。现在我想在这段代码上做类似的事情:

for im in images:
      ww, hh = zip(*(im.size for im in images))
      www, hhh = im.size
      max_h = max(hh)
      y_test = []
      try:
        new_im.paste(im, (x_offset,y))
        with open('x.txt', 'a') as file:
            file.write(str(x_offset) + "\n")
        with open('y.txt', 'a') as file:
            file.write(str(y) + "\n")
        with open('w.txt', 'a') as file:
            file.write(str(www) + "\n")
        with open('h.txt', 'a') as file:
            file.write(str(hhh) + "\n")
        x_offset += im.size[0]
        if x_offset > int(q_w) - www:
            print(max(hh))
            x_offset =0
            y += max(hhh)
            if hh < y:
                y += hhh
            if hh > y:
                y -= hhh
            else:
                y += max_h


      except:
          continue

如果 x_offset > int(q_w) - www 那么我想取 hhh 的最大值直到这里。我怎样才能做到这一点?

标签: python-3.xlist

解决方案


请理解,我们适用max( ... )于一个序列,而不是单个标量值,例如,max([6, 7, 8])而不是max(4).

第一个例子不清楚。我认为您的意图是k=4在列表上运行一个大小窗口并显示局部最大值。一种更自然的表达方式u是:

for i in range(len(list1) - k):
    window = list1[i : i + k]
    print(i, max(window))

一个非常相似的方法将适用于您的第二个示例。for以这种方式表达循环,并切掉元素k

for i, im in enumerate(images):
    if i + k < len(images):
        window = images[i : i + k]
    ...

在那之后你自己做一些有用的事情window,因为你的问题不清楚你想要什么的细节。

你在循环中写了这一行:

   ww, hh = zip(*(im.size for im in images))

它每次都计算相同的东西,所以为了让事情更快,它属于循环之外。此外,它会丢弃im迭代变量,因此对于循环的其余部分是一个im常量值,它始终是. 这看起来很糟糕,它可能不是你想要的。images

同样,这是一个可以在循环外提升的常量:

   max_h = max(hh)

此外,您except: continue是正确的,但except: pass将是更常见的成语,表达了简单地忽略异常的意图。您发布的代码中没有任何语句跟随它,因此两者的效果相同。理解这continue将跳到循环顶部,如果有的话,跳过下面的语句。


推荐阅读