Несколько запутанно, в понимании списка вы должны сначала поставить внешнюю l oop:
>>> [x for x in y for y in np.random.random((2,2))]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'y' is not defined
>>> [x for y in np.random.random((2,2)) for x in y]
[0.5656047153549479, 0.19139220091114273, 0.10286775868807774, 0.3230695608882298]
Так что просто измените порядок:
[
p.y
for y_value in y_value_group
for line_id in horizontal_lines[y_value]
for p in LINES[line_id].pts
]