Сортировка стен (Витражей) по длине и высоте и назначение марки.

Главная Форумы Задать вопрос Сортировка стен (Витражей) по длине и высоте и назначение марки.

В этой теме 7 ответов, 4 участника, последнее обновление  Ренат Я. 1 год, 6 мес. назад.

Просмотр 8 сообщений - с 1 по 8 (из 8 всего)
  • Автор
    Сообщения
  • #7065 Score: 0

    Есть задача, отсортировать стены по длине, высоте и назначить им марку, желательно без питона.

    На данный момент получилось отсортировать стены по длине и получить индексы элементов с одинаковой длиной.

    Теперь встал вопрос как совместить список элементов и полученные значения индексов? Примерно так В-1, В-2, В-3.

    И далее – как добавить дополнительный параметр для сортировки?

    ЯндексДиск

    #7067 Score: 0

    Denis
    Участник
    4 pts

    Как то вот так, сначала сортируем витражи чтоб марки по порядку ставились, потом группируем и заносим марки в параметр… наверно… я еще сам только учусь

    #7070 Score: 0

    Спасибо большое)

    #7071 Score: 2

    Анатолий
    Участник
    31 pts

    Еще один вариант с помощью масенького скрипта питона

    import clr
    el=IN[0]
    a=IN[1]
    b=IN[2]
    from operator import itemgetter
    c=sorted (el, key=itemgetter(a,b))
    OUT = c

    p.s. В начале у меня стоит нод на выборку первых 109 элементов, потому что в файле, который отказался под рукой не все стены имели корректную длину/высоту.

    #7073 Score: 1

    Ренат Я.
    Модератор
    79 pts

    Вместо сортировки по длине и высоте, можно сгруппировать по площади, я чутка изменил высоту средних витражей чтобы добавились новые типы. Маркировка идет от витражей с большей площади к меньшей

    #7087 Score: 0

    Denis
    Участник
    4 pts

    Часто пользуюсь комбинацией нодов SortByKey + GroupByKey. Проблема только одна – не корректная сортировка ( приходиться нумеровать 01, 02, …). Решил попытать сделать в питоне … спустя почти два вечера вышло только вот это:

    from itertools import groupby
    from operator import itemgetter
    Room = IN[0]
    Name = IN[1]
    Param = []
    for i in Room:
    Param.append(i.GetParameterValueByName(Name))
    Duble_list = zip (Room, Param)
    OUT = []
    for key, group in groupby (sorted (Duble_list,key=itemgetter(1)) ,key=lambda x:x[1]):
    OUT.append (list(group))

    В итоге группы не правильно делает (до правильной сортировки я даже не дошел… хотел от сюда взять ). Для первого скипта на питоне сильно сложная задача для меня. Искал еще здесь но там сортировка только списка а не елементов.

    Если не сложно можете допилить его или объяснить как это сделать.

    Задача минимум хотя бы сделать скипт на замену нода SortByKey с правильной сортировкой

    #7088 Score: 0

    Вместо сортировки по длине и высоте, можно сгруппировать по площади, я чутка изменил высоту средних витражей чтобы добавились новые типы. Маркировка идет от витражей с большей площади к меньшей

    По хорошему для сортировки нужно использовать сразу три параметра “Длина”, “Неприсоединенная высота”, “Площадь”. Иначе могут вполне вероятно появится дубликаты. Так как площадь у витража 1200х300 и 300х1200 одна и таже.

    #7090 Score: 0

    Ренат Я.
    Модератор
    79 pts

    В таком случае можно использовать такую конструкцию

Просмотр 8 сообщений - с 1 по 8 (из 8 всего)

Для ответа в этой теме необходимо авторизоваться.