Пожалуйста, поймите, что мы применяем 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, пропуская следующие утверждения, если таковые были.