Помогите удалить дупликаты в списке Python
Главная › Форумы › Задать вопрос › Помогите удалить дупликаты в списке Python
- В этой теме 2 ответа, 3 участника, последнее обновление 5 лет, 6 месяцев назад сделано ИваСерж.
-
АвторСообщения
-
AskarУчастник
Использую код Александра Попова из скрипта Обновление экспликации полов. Скрипт выдает список помещений в которых используются одинаковые типы полов. Проблема в том, что он выдает список с одинаковыми именами помещений, а этого не надо. Python я не знаю, но как я понял модуль Collection не поддерживается.
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
rooms = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Rooms).WhereElementIsNotElementType().ToElements()`
#-----------ВХОДНЫЕ ДАННЫЕ------------------
par1=IN[1]
setpar=IN[2]
tire = IN[3]
zap = IN[4]
#----------ФУНКЦИИ------------------
def get3p(room):
try:
val1 = room.LookupParameter(par1).AsValueString()
except:
val1=""
if val1 is None:
val1=""
valob=val1
return valob
#----------СОРТИРОВКА ПОМЕЩЕНИЙ ПО НОМЕРУ--------------
r1=[]
list1=[]
for room in rooms:
if room.Area>0:
r1.append(room)
num1=room.get_Parameter(BuiltInParameter.ROOM_NAME).AsString()
nam1=room.get_Parameter(BuiltInParameter.ROOM_NUMBER).AsString()
num2=""
nam2=""
num3=""
nam3=""
num4=""
nam4=""
num5=""
nam5=""
num6=""
nam6=""
if "." in num1:
c1=num1.find(".")
num2=num1[c1+1:]
num1=num1[:c1]
if "." in num2:
c2=num2.find(".")
num3=num2[c2+1:]
num2=num2[:c2]
if "." in num3:
c3=num3.find(".")
num4=num3[c3+1:]
num3=num3[:c3]
if "." in num4:
c4=num4.find(".")
num5=num4[c4+1:]
num4=num4[:c4]
if "." in num5:
c5=num5.find(".")
num6=num5[c5+1:]
num5=num5[:c5]
if num1!="":
num1=num1
if num2!="":
num2=num2
if num3!="":
num3=num3
if num4!="":
num4=num4
if num5!="":
num5=num5
if num6!="":
num6=num6
list1.append([room,num1,num2,num3,num4,num5,num6])
#list1.append(UnwrapElement(room).get_Parameter(BuiltInParameter.ROOM_NUMBER).AsString())
from operator import itemgetter
b = sorted(list1,key = itemgetter(1,2,3,4,5,6))
list2=[]
for b1 in b:
nm1 = b1[1]
if b1[2]!="":
nm1=nm1+"."+(b1[2])
if b1[3]!="":
nm1=nm1+"."+(b1[3])
if b1[4]!="":
nm1=nm1+"."+(b1[4])
if b1[5]!="":
nm1=nm1+"."+(b1[5])
if b1[6]!="":
nm1=nm1+"."+(b1[6])
list2.append([b1[0],nm1])
#---------------БЕРЕМ ПАРАМЕТРЫ-----------------------
uniq=[]
for room1 in list2:
room = room1[0]
valob = get3p(room)
if valob not in uniq:
uniq.append(valob)
numlist=[]
roomlist=[]
roomtxt=[]
for val in uniq:
list=[]
text=[]
txt=""
for room1 in list2:
room=room1[0]
num = room1[1]
valob = get3p(room)
if valob==val:
list.append(room)
text.append(num)
txt=txt+num+zap
roomtxt.append(txt[:len(txt)-1])
numlist.append(text)
roomlist.append(list)
"""
i=0
list3=[]
list4=[]
for num in numlist:
i=0
list5=[]
for n in num:
num1=n
num2=""
num3=""
num4=""
num5=""
num6=""
if "." in num1:
c1=num1.find(".")
num2=num1[c1+1:]
num1=num1[:c1]
if "." in num2:
c2=num2.find(".")
num3=num2[c2+1:]
num2=num2[:c2]
if "." in num3:
c3=num3.find(".")
num4=num3[c3+1:]
num3=num3[:c3]
if "." in num4:
c4=num4.find(".")
num5=num4[c4+1:]
num4=num4[:c4]
if "." in num5:
c5=num5.find(".")
num6=num5[c5+1:]
num5=num5[:c5]
if num1!="":
num1=int(float(num1))
if num2!="":
num2=int(float(num2))
if num3!="":
num3=int(float(num3))
if num4!="":
num4=int(float(num4))
if num5!="":
num5=int(float(num5))
if num6!="":
num6=int(float(num6))
list5.append([num1,num2,num3,num4,num5,num6,n])
#---------Вносим в группы номера, идущие подряд-----------
j=0
gr=[]
gr1=[]
while j2:
txt=k[0]+tire+k[k.Count-1]+zap
list4.append(txt[:len(txt)-1])
i=i+1"""
TransactionManager.Instance.EnsureInTransaction(doc)
i=0
for rooms in roomlist:
for room in rooms:
room.LookupParameter(setpar).Set(roomtxt[i])
i=i+1
TransactionManager.Instance.TransactionTaskDone()
OUT = roomlistilias.ismУчастникС кодом я помочь не смогу, но я со скриптами Попова поступаю так: делю код на несколько нодов PythonScript и додумываю логику работы. А по вопросу: есть в Динамо нод List.UniqueItems который удаляет повторяющиеся значения и на выходе выдает только уникальные значения
Прям таки очень сильно хочется Linq воспользоваться?
Ну если умеете, то вот, как пример
https://pastebin.com/ej0rTmt9
————————————————————————–а теперь фокус: тоже самое, если не важен порядок, в две строчки через сэт:
outlist = [‘a’,’list’,’of’,’strings’,’a’,’list’,’of’,’strings’ ]
OUT = set(outlist) -
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.