Помогите удалить дупликаты в списке Python

Главная Форумы Задать вопрос Помогите удалить дупликаты в списке Python

Помечено: ,

В этой теме 2 ответа, 3 участника, последнее обновление  ИваСерж 2 мес., 3 нед. назад.

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

    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 = roomlist

    #9124 Score: 0

    ilias.ism
    Участник

    С кодом я помочь не смогу, но я со скриптами Попова поступаю так: делю код на несколько нодов PythonScript и додумываю логику работы. А по вопросу: есть в Динамо нод List.UniqueItems который удаляет повторяющиеся значения и на выходе выдает только уникальные значения

    #9129 Score: 0

    ИваСерж
    Модератор
    121 pts

    Прям таки очень сильно хочется Linq воспользоваться?
    Ну если умеете, то вот, как пример
    https://pastebin.com/ej0rTmt9
    ————————————————————————–

    а теперь фокус: тоже самое, если не важен порядок, в две строчки через сэт:
    outlist = [‘a’,’list’,’of’,’strings’,’a’,’list’,’of’,’strings’ ]
    OUT = set(outlist)

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

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