Группировка по общим элементам списка

Главная Форумы Dynamo ДизайнСкрипт Группировка по общим элементам списка

Просмотр 14 сообщений - с 1 по 14 (из 14 всего)
  • Автор
    Сообщения
  • #4004 Score: 0
    Евгений Колчин
    Участник
    11 pts

    Добрый день форум!  Вопрос такой, подскажите как из левого списка сделать правый. Т.е. склеить все списки с пересекающимися значениями элементов в один.

    #4007 Score: 0
    Khasan Mamaev
    Модератор
    186 pts

    А что нужно сделать? Я не понял по какому принципу идет обработка

    #4010 Score: 0
    Евгений Колчин
    Участник
    11 pts

    Хасан, по цепочке. Объединяя пары с общими элементами в один список, ну потом в нем остаются только уникальные элементы.

    #4011 Score: 0
    Legantmar
    Хранитель
    474 pts

    возможно Хасан сделает это более элегантно, но я не помню альтернативу flatten списка в питоне, а возиться с циклами не хочется…

    #4012 Score: 0
    Евгений Колчин
    Участник
    11 pts

    Но конечное количество список неизвестно, т.е. их не 2. Это я в примере привел самый простой случай.

    #4013 Score: 0
    Khasan Mamaev
    Модератор
    186 pts

    Что то я туплю, так и не понял что нужно делать)

    #4014 Score: 1
    Legantmar
    Хранитель
    474 pts

    че-то накрутил, сам не понял как так получилось )) Скачать скрипт

    кстати интересная была задачка, в том числе и для Попова и Дронова. где они !?


    Здесь можно видеть мою “фирменную глупость” – в любой непонятной ситуации, сначала создать пустых листов.. ))

    #4015 Score: 0
    Евгений Колчин
    Участник
    11 pts

    Отлично!!! То что нужно! Спасибо!)

    #4016 Score: 0
    Евгений Колчин
    Участник
    11 pts

    Протестировал на сложном массиве из помещений – не работает =((

    #4017 Score: 0
    Legantmar
    Хранитель
    474 pts

    ко мне какие претензии? )) задача поставлена, задача решена (мысль показал).

    кто ж знал, что у тебя сложный массив из помещений ))

    (либо приводи данные суб.листов на входе к простым цифрам, в идеале integer, либо придумывай свой алгоритм)

    #4029 Score: 2
    Khasan Mamaev
    Модератор
    186 pts

    inList = [[1,2],[3,4],[1,13],[4,52],[7,13],[77,52],[6,2],[0,3]]
    dd =[]
    i = len(inList)
    x = 0
    while i > 0:
    pop1 = inList.pop(0)
    dd.append(pop1)
    for j in pop1:
    for n,k in enumerate(inList):
    if k.count(j) != int(0):
    dd[x].extend(inList.pop(n))
    i = len(inList)
    x = x + 1

    uniq =[]
    for i in dd:
    if len(set(i)) > 1:
    uniq.append(sorted(set(i)))

    #4043 Score: 0
    KhonVlad
    Участник

    …..т.е. задача стоит в том чтобы найти все массивы с одинаковыми данными, потом рассортировать по возрастанию, убрав ненужные?

    #4060 Score: 0
    Евгений Колчин
    Участник
    11 pts

    нет, собрать элементы в группы, зная  пары соседних друг с другом элементов. таким способом получилось автоматически собирать помещения в квартиры вытаскивая пары соседних помещений из дверей(to Room/from Room). Хасан, браво! Работает как часы! А мои попытки написать код самостоятельно не увенчались успехом, но я хоть разобрался с циклами)

    #4061 Score: 0
    Евгений Колчин
    Участник
    11 pts

    надо ещё посидеть и до конца понять алгоритм Хасана! Очень помог!

Просмотр 14 сообщений - с 1 по 14 (из 14 всего)
  • Для ответа в этой теме необходимо авторизоваться.