#python #for-loop #merge
Вопрос:
У меня есть три цикла для одного действия. Как объединить эти циклы в один?
import lalala
def cv2fn(top, left, width, height, result, path=''):
coords = {'top': top, 'left': left, 'width': width, 'height': height}
png = cv2.imread(path, cv2.IMREAD_GRAYSCALE)
shot = np.array(sct.grab(coords))
capture = cv2.cvtColor(shot, cv2.COLOR_BGR2GRAY)
res = cv2.matchTemplate(capture, png, cv2.TM_CCOEFF_NORMED)
loc = np.where(res >= result)
return loc
for pt in zip(*cv2fn(915, 1646, 80, 80, 0.65, 'close.png')[::-1]):
print('close')
for pt in zip(*cv2fn(919, 1661, 36, 36, 0.60, 'today.png')[::-1]):
print('close')
for pt in zip(*cv2fn(716, 1546, 280, 100, 0.20, 'exit.png')[::-1]):
print('close')
пытался:
for (
pt in zip(*cv2fn(915, 1646, 80, 80, 0.65, 'close.png')[::-1])
or
pt in zip(*cv2fn(919, 1661, 36, 36, 0.60, 'today.png')[::-1])
or
pt in zip(*cv2fn(716, 1546, 280, 100, 0.20, 'exit.png')[::-1])
):
print('close')
но этот трюк работает только с циклами «если»
Ответ №1:
Я бы предложил itertools.chain
from itertools import chain
for pt in chain(
zip(*cv2fn(915, 1646, 80, 80, 0.65, 'close.png')[::-1]),
zip(*cv2fn(919, 1661, 36, 36, 0.60, 'today.png')[::-1]),
zip(*cv2fn(716, 1546, 280, 100, 0.20, 'exit.png')[::-1])
):
print('close')