Операции над списками разной вложенности

Главная Форумы Задать вопрос Операции над списками разной вложенности

Просмотр 15 сообщений - с 1 по 15 (из 18 всего)
  • Автор
    Сообщения
  • #6334 Score: 0
    txt
    Модератор
    86 pts

    есть списки:

    a=[1,2]
    b=[1,1,1,1]
    если запустить код:

    lst=[]
    for i in a:
    for k in b:
    
    sum=i+k
    lst.append(sum)

    Получим
    >>>>[2,2,2,2,3,3,3,3]

    Вопрос 1 – как получить lst=[[2,2,2,2],[3,3,3,3]]  т.е. количество подлистов равнялось количеству элементов в списке “а”

    #6335 Score: 0
    Ренат Я.
    Модератор
    79 pts

    Если примитивно то так можно)

    
    a = IN[0]
    b = IN[1]
    lst1=[]
    lst2=[]
    for k in b:
    	lst1.append(a[0]+k)
    	lst2.append(a[1]+k)	
    OUT = lst1,lst2
    
    #6336 Score: 0
    txt
    Модератор
    86 pts

    ну как вариант) для частного , конкретно этого случая подойдет

    однако при неизвестном заранее числе элементов в списке “a” – не подойдет , а при известном , но большом их количестве придется писать эдакую “скатерть” )

    lst1.append(a[0]+k)  здесь надо как то числовому индексу [0] присвоить переменную ,например, [i] наверн как то так….

    #6337 Score: 0
    Ренат Я.
    Модератор
    79 pts

    про матрешку из если согласен
    присваивание переменной особого результата не даст
    а присвоить можно типо такого

    
    a = IN[0]
    b = IN[1]
    lst0=[]
    lst1=[]
    lst2=[]
    for c, x in enumerate(a):
    	for k in b:
    		if c == 0:
    			lst0.append(a[c]+k)
    		elif c == 1:
    			lst1.append(a[c]+k)
    		else:
    			lst2.append(a[c]+k)
    OUT = lst0,lst1,lst2
    
    #6338 Score: 0
    txt
    Модератор
    86 pts

    можно конечно и таким топориком:

    сделать вначале сплошной список, затем разделить на равные отрезки, как метод chop в ноде – однако у меня его не получилось запустить (т.е. в питоне использовать DS.Core.List.Chop(t1,t2) – библиотеки RevitNodes, DS Core подключал -чет пишет ошибку)

    но ,несомненно, есть способ проще, как сделать циклами и append или чего то в этом духе… буду искать способы…

    #6339 Score: 0
    Ренат Я.
    Модератор
    79 pts

    тоже попробовал засунуть Chop в python не получилось

    может знатоки подскажут чего ему надо скормить чтоб сработал

    #6342 Score: 2
    Legantmar
    Хранитель
    475 pts

    для chop в pyhon используйте это (работает с текстом, поэтому вначале нужен str(inn)):
    inn = str(11223234)
    chop = 2
    listChop = [int(inn[i*chop:i*chop+chop]) for i in range(len(inn)/chop)]
    Вывод будет таким: [11, 22, 32, 34]

    По теме вопроса можно так:

    #6344 Score: 0
    txt
    Модератор
    86 pts

    Вопрос 2

    есть списки

    a=[[1,2,3],[4,5,6]]

    b=[2,5]

    1.) если элемент i в списке b равен элементу k в списке b , то переместить  i , в начало подсписка , т.е.

    out_move=[[2,1,3],[5,4,6]]

    2.) получить индексы элементов из списка b находящихся в списке a, т.е.

    out_index=[[1],[1]]

    3.) имея списки a=[[1,2,3],[4,5,6]] и индексы out_index=[[1],[1]]  получить обратно элементы по этим индексам, т.е.

     b=[2,5]

    #6346 Score: 0
    txt
    Модератор
    86 pts

    По поводу вопроса 2.1

    есть код:

    for i in a:
    i.sort(key=b.__contains__,reverse=True)
    OUT=a

    с простыми списками с числами он работает , но в динамо при работе с объектами Ревит при повторном запуске скрипта он работает через раз – то верно то неверно (хаотично смешивает списки)

    #6350 Score: 0
    txt
    Модератор
    86 pts

    для вопроса 1 получилось состряпать такое решение:

    a=[1,2]
    b=[1,2,3,4]
    sum=[]
    for i in a:
    sub=[b[x]+i for x in range(len(b))]
    sum.append(sub)
    OUT=sum

    либо однострочником:
    sum_sub=[[b[x]+i for x in range(len(b))] for i in a]
    на выходе имеем:

    #6352 Score: 2
    txt
    Модератор
    86 pts

    напишу здесь чтобы сохранить
    иногда бывает нужно чтобы цикл пробегал в такой последовательности:

    вот скрипт :

    результат:

    #6354 Score: 2
    txt
    Модератор
    86 pts

    также подсмотрел такой метод CHOP:

    #6356 Score: 1
    txt
    Модератор
    86 pts

    Возвращаясь к Вопросу 2.2 (2.) получить индексы элементов из списка b находящихся в списке a)
    вот так получилось:

     

    результат:

    #6357 Score: 0
    txt
    Модератор
    86 pts

    Возвращаясь к Вопросу 2.3 (3.) имея списки a и индексы b_index получить обратно элементы по этим индексам)

    скрипт:

    результат:

     

    #6361 Score: 0
    txt
    Модератор
    86 pts

    к Вопросу 1.1
    скрипт (может как то можно и проще, но получилось то что получилось):

    результат:

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