Как обмениваться элементами кортежа с элементами списка? - PullRequest
0 голосов
/ 30 декабря 2018

У меня проблема с кортежами и списками в Python:

Предположим, у меня есть кортежи следующей формы

lambda21 = ((0,1),(0,),(),(0))
lambda22 = ((0,),(1,),(0,),(1,))

Теперь у меня есть четыре списка, а именно

 u1 = [p,r,t]
 l1 = [q,s,u]
 u2 = [v,x]
 l2 = [w,y]

Теперь я хочу преобразовать свои элементы кортежа в элементы списков, где u1 соответствует lambda21 [0], l1 - lambda21 [1], u2 - lambda21 [2] и l2 - lambda21 [3].

И число в каждой лямбде - это позиция элемента в списках, и ее следует заменить на этот элемент, где результат должен быть

lambda21 = ((p,r),(q,),(),(w))
lambda22 = ((p,),(s,),(v,),(y,))

Кто-нибудь знает, как это сделать?обмен может быть с использованием списка-понимания?

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Введено в NumPy, так как вы можете индексировать списком по массивам (но не списками).

lambda21 = ((0,1),(0,),(),(0,))
lambda22 = ((0,),(1,),(0,),(1,))

u1 = ['p','r','t']
l1 = ['q','s','u']
u2 = ['v','x']
l2 = ['w','y']

lists = [u1, l1, u2, l2]
[np.array(x)[list(y)] for x, y in zip(lists, lambda21)]

Без NUMPY вы можете использовать другое понимание, может быть или не быть легче читать:

[[x[t] for t in y] for x, y in zip(lists, lambda21)]

Выход:

[['p', 'r'], ['q'], [], ['w']]
0 голосов
/ 30 декабря 2018

Попробуйте:

lists = [u1, l1, u2, l2]
lambda21 = tuple(tuple(lists[n][index] for index in t) for n, t in enumerate(lambda21))

Скажите, работает ли это, потому что я не могу проверить это прямо сейчас.

...