Как вернуть 2 списка из 2 списков, используя синтаксис списков? - PullRequest
0 голосов
/ 19 апреля 2020

всем, я делал некоторые поиски по использованию синтаксиса понимания списка. Я хотел бы посмотреть, возможно ли вернуть 2 списка из 2 существующих списков с 1 строкой кода, то есть используя понимание списка. Я сталкивался с этим сообщением Можно ли вернуть два списка из списка? , что заставляет меня думать, что это возможно. Создание новых списков независимо работает нормально. Я хотел бы посмотреть, как далеко я могу взять его, то есть минимальный код, но при этом легко читаемый новые списки Av и Bv выглядят следующим образом:

Av,Bv=[(zeta*wn*dt,wd*dt) for i,(wn,wd) in zip(wnv,wdv)]

где zeta и dt - просто числа. Можно ли это сделать? С приведенным выше кодом, я получаю сообщение об ошибке: распаковать не повторяемый объект с плавающей точкой

Ответы [ 2 ]

2 голосов
/ 19 апреля 2020

Вы близки, вам просто нужно распаковать результат в конце:

Av,Bv = zip(*[(zeta*wn*dt,wd*dt) for (wn,wd) in zip(wnv,wdv)])

(и удалить i из вашего кода)

0 голосов
/ 19 апреля 2020

Ошибка появляется, когда zip создает список кортежей (каждый из которых имеет 2 элемента), который повторяется. Здесь только кортеж (wn, wd) берется из списка, который итерируется, а не переменная i.

Следующий код должен работать хорошо:

Av,Bv = zip(*[(zeta*wn*dt,wd*dt) for (wn,wd) in zip(wnv,wdv)])

PS, обратите внимание, что конечные результаты Av и Bv на самом деле являются кортежами, а не списками ,

...