Как я могу получить максимальное значение из некоторого списка, но с некоторыми условиями? - PullRequest
0 голосов
/ 05 января 2020
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))

Теперь я хочу взять максимальное значение из этого списка, но только из списка1 [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 then Я хочу принять максимальное значение hhh, пока здесь. Как я могу это сделать?

1 Ответ

0 голосов
/ 06 января 2020

Пожалуйста, поймите, что мы применяем max( ... ) к последовательности, а не к одному скалярному значению, например max([6, 7, 8]) вместо max(4).

Этот первый пример был неясен. Я думаю, что вы намерены запустить окно размером k=4 поверх списка и отобразить локальные максимумы. Более естественный путь к express, который без увеличения u внутри l oop, был бы:

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

Очень похожий подход применим к вашему второму примеру. Сформулируйте таким образом for l oop и отрежьте k элементов:

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

После этого вы сделаете что-нибудь полезное с window, как ваш вопрос было неясно, что именно вы хотите.

Вы написали эту строку в l oop:

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

Она вычисляет одно и то же каждый раз, поэтому чтобы сделать вещи быстрее, он принадлежит за пределами l oop. Кроме того, он уничтожает переменную итерации im, поэтому для остальной части l oop im является постоянным значением, это всегда элемент last из images. Это кажется плохим, это, вероятно, не то, что вы хотели.

Аналогично, эта константа может быть выведена за пределы l oop:

   max_h = max(hh)

Также , ваш except: continue правильный, но except: pass будет более обычной идиомой, выражающей намерение просто игнорировать исключение. Никакие утверждения не следуют за этим в коде, который вы разместили, так что оба сработают одинаково. Поймите, что continue будет переходить к началу-l oop, пропуская следующие утверждения, если таковые были.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...