Ваш код не работает, как ожидалось, потому что в Python оператор *
полиморфный. Таким образом, если x
и n
являются числами, x*n
возвращает произведение обоих чисел, но если один из операндов (скажем n
) является целым числом, а другой представляет собой последовательность (.e. x
- это список, кортеж или строка) выражение x*n
возвращает последовательность, результаты которой конкатенируются x
с самим собой n
раз. Примеры:
>>> .1 * 2.5
0.25
>>> [1, 2] * 3
[1, 2, 1, 2, 1, 2]
>>> "beep" * 2
beepbeep
Для того, чтобы получить ожидаемый результат вы должны выравниваться список перед нанесением map()
:
>>> your_list = [[1, 2], [3, 4]]
>>> flat_list = [item for sublist in your_list for item in sublist]
>>> flat_list
[1, 2, 3, 4]
>>> triples = map(lambda x: 3*x, flat_list)
>>> triples
[3, 6, 9, 12]
На самом деле вам не нужно использовать map()
и lambda
. Я думаю, что использование однострочного списка будет более питоновским:
>>> triples = [3*item for sublist in your_list for item in sublist]
>>> triples
[3, 6, 9, 12]