Python сокращает несколько вложенных циклов в Grasshopper
Я пока не могу найти способ решить эту проблему без использования нескольких вложенных циклов. Проблема в том, что я делаю сравнение между двумя списками, используя геометрический метод от Rhinoceros. В основном это список линий, набор начальных и конечных точек (вложенные списки). Все начальные и конечные точки касаются линий. Сценарий сравнивает индекс ближайшей строки с началом с ближайшей строкой до конца, и, если они совпадают, возвращает True
,
Это мой текущий код:
for i in range (10):
for j in range (100):
for k in range (3):
for l in range (len(linesList)):
pullSt = rc.Geometry.Curve.ClosestPoint(linesList[l], stPoint[i][j][k], 0.0001)[0]
pullEnd = rc.Geometry.Curve.ClosestPoint(linesList[l], endPoint[i][j][k], 0.0001)[0]
if pullSt == True and pullEnd == True:
match[i][j][k] = True
Я думал, что это может работать с выражением генератора, но я застрял, потому что кажется, что мне действительно нужно временно сохранить значения pullSt и pullEnd перед сравнением друг с другом. Я знаю, что, вероятно, перегружаю свою память и должен быть более быстрый способ сделать это, но я просто не знаю, как это сделать.
ПРИМЕЧАНИЕ: rc.Geometry.Curve.ClosestPoint возвращает True
если расстояние между линией и точкой меньше допуска 0,0001, то есть точка находится на линии.
1 ответ
Похоже, что этот цикл не ссылается ни на что другое в вашем наборе данных, и, вероятно, он будет в порядке, так как гораздо более короткий фрагмент кода работает над каждым объектом с использованием встроенного инструментария Grasshopper.
pullSt = rc.Geometry.Curve.ClosestPoint(linesList[l], stPoint, 0.0001)[0]
pullEnd = rc.Geometry.Curve.ClosestPoint(linesList[l], endPoint, 0.0001)[0]
if pullSt == True and pullEnd == True:
match = True
Если вы щелкните правой кнопкой мыши на входах, вы можете изменить их с дерева доступа к элементу доступа.
Это все предположение, потому что вы еще не сказали, какую проблему вы на самом деле пытаетесь решить.
Если вы опубликуете проблему, я обновлю ответ, чтобы быть более конкретным.