Переменная область в пределах понимания списка
У меня есть список кортежей, которые состоят из строки и другого списка;
[('string1', ['a1', 'b1']),
('string2', ['a2', 'b2']),
('string3', ['a3', 'b3'])]
Я не могу понять, используя понимание списка, чтобы прийти к чему-то вроде;
[['string1a1', 'string1b1'],
['string2a2', 'string2b2'],
['string3a3', 'string3b3']]
Я пробовал что-то вроде
results = [join(ministring, i) for i in (miniarray for (ministring, miniarray) in myarray)]
но я запутался в каждой области видимости переменных в расширении / выражении (?).
3 ответа
Решение
Так просто:
lst = [('string1', ['a1', 'b1']),
('string2', ['a2', 'b2']),
('string3', ['a3', 'b3'])]
res = [[master + tail for tail in sublist] for master, sublist in lst]
который возвращает:
[['string1a1', 'string1b1'], ['string2a2', 'string2b2'], ['string3a3', 'string3b3']]
Обратите внимание, что при таком подходе длина подсписка внутри кортежа не является фиксированной. Это может быть сколь угодно долго.
Вы могли бы сделать что-то вроде этого:
data = [('string1', ['a1', 'b1']),
('string2', ['a2', 'b2']),
('string3', ['a3', 'b3'])]
result = [[s + e1, s + e2] for s, [e1, e2] in data]
print(result)
Выход
[['string1a1', 'string1b1'], ['string2a2', 'string2b2'], ['string3a3', 'string3b3']]
Обратите внимание, что это предполагает, что внутренний список имеет только два элемента.
Попробуй это:
new_list = list(map(lambda x: [x[0]+x[1][0], x[0]+x[1][1]],data))