Операции над списками разной вложенности
Главная › Форумы › Задать вопрос › Операции над списками разной вложенности
- В этой теме 17 ответов, 3 участника, последнее обновление 7 лет, 3 месяца назад сделано txt.
-
АвторСообщения
-
есть списки:
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]] т.е. количество подлистов равнялось количеству элементов в списке “а”
Если примитивно то так можно)
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
ну как вариант) для частного , конкретно этого случая подойдет
однако при неизвестном заранее числе элементов в списке “a” – не подойдет , а при известном , но большом их количестве придется писать эдакую “скатерть” )
lst1.append(a[0]+k) здесь надо как то числовому индексу [0] присвоить переменную ,например, [i] наверн как то так….
про матрешку из если согласен
присваивание переменной особого результата не даст
а присвоить можно типо такого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
можно конечно и таким топориком:
сделать вначале сплошной список, затем разделить на равные отрезки, как метод chop в ноде – однако у меня его не получилось запустить (т.е. в питоне использовать DS.Core.List.Chop(t1,t2) – библиотеки RevitNodes, DS Core подключал -чет пишет ошибку)
но ,несомненно, есть способ проще, как сделать циклами и append или чего то в этом духе… буду искать способы…
тоже попробовал засунуть Chop в python не получилось
может знатоки подскажут чего ему надо скормить чтоб сработал
Вопрос 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]
По поводу вопроса 2.1
есть код:
for i in a:
i.sort(key=b.__contains__,reverse=True)
OUT=aс простыми списками с числами он работает , но в динамо при работе с объектами Ревит при повторном запуске скрипта он работает через раз – то верно то неверно (хаотично смешивает списки)
для вопроса 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]
на выходе имеем:Возвращаясь к Вопросу 2.3 (3.) имея списки a и индексы b_index получить обратно элементы по этим индексам)
скрипт:
результат:
к Вопросу 1.1
скрипт (может как то можно и проще, но получилось то что получилось):
результат:
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.