Короткая запись множества значений для спецификаций
Главная › Форумы › Задать вопрос › Короткая запись множества значений для спецификаций
- В этой теме 10 ответов, 4 участника, последнее обновление 8 лет назад сделано
Khasan Mamaev.
-
АвторСообщения
-
Добрый день у меня вопрос к знатокам Python . Кто знает как можно получить из последовательности чисел короткую запись к примеру из списка 1,2,3,4,5,7,8,9 получить запись в виде 1-5,7-9. у меня была мысль использовать нод из видео урока от Khasan Mamaev про уникальные точки, но моих знаний не хватило ни на что(
Если разделить список только на 2 части (итоговое значение- строка) , то вот дилетантский нод (вы его не применяйте, придут сэнсэи покажут как надо…) для примеру:
Вот что получилось у меня, но мне кажется это не самое чистое решение, в добавок я не знаю как оно будет работать с несколькими множествами ( в конечном счете мне нужно именно это) Пример: {[1,2,3,4,5,6,8,9,10],[6,7,8,12,13,14]}
import clr
clr.AddReference(‘ProtoGeometry’)
from Autodesk.DesignScript.Geometry import *
#Введенные в этом узле данные сохраняется в виде списка в переменных IN.
dataEnteringNode = INrestart = IN[0]
sts = IN[1]
tol = IN[2]def short(st):
uniq = []
while len(st) > 1:
fff=st[0]
uniq.append(fff)
if st[1]-st[0]==tol:
uniq.append(“-“)while st[1]-st[0]==tol:
st.pop(0)
else:
first = st.pop(0)
second = st[0]uniq.append(first)
uniq.append(“;”)else:
uniq.append(“;”)
else:
fffs=st[0]
uniq.append(fffs)
return uniq#Назначьте вывод переменной OUT.
OUT = short(sts)К сожалению на реальных задачах, такой алгоритм вешается, тут уже без знатоков оптимизации не обойтись(
Может как-то так?
first, last, sublist = IN[0], IN[1], [] for i,k in zip(first, last): if i != k: sublist.append(str(i)+"-"+str(k)) else: sublist.append(str(i)) OUT="; ".join(sublist)
Можно и так, только как список чисел разделить на подсписки? на входе имеем (1,2,3,4,8,9,10,13,14,15,18,20,21) как получить из этого ((1,2,3,4),(8,9,10),(13,14,15),(18),(20,21)). В вашем случае вы сразу создали список с подписками. в моем примере я после создания такого списка использовал flatten для приближения к реальным условиям.
Откуда в итоговом списке взялся диапазон 8-30? И почему нет единички в единственном числе?
Попробуйте мой код:
Откуда в итоговом списке взялся диапазон 8-30? И почему нет единички в единственном числе?
Потому что в списке остаются только уникальные значения, без дубликатов. Цифра “1” отсутствует в единственном числе, поскольку в списке есть ещё значения 2,3,4, которые и объединяются в запись “1-4”. С значениями 8-30 та же история. В списке присутствовали значения “8, 9, 10, “10..30”, что дает в короткой записи “8-30”
ааа, смешали все списки
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.