【发布时间】:2022-01-24 12:22:17
【问题描述】:
考虑以下列表:
arr = [[1, 2, 3], [3, 2, 1]]
我想得到它的平方,使用 map 和 lambda 函数。结果应该是:
arr = [[1, 4, 9], [9, 4, 1]]
我试过这个:
print(list(map(lambda x: [lst**2 for lsts in arr for lst in lsts], arr)))
但我得到了答案:
[[1, 4, 9, 9, 4, 1], [1, 4, 9, 9, 4, 1]]
【问题讨论】:
-
map已经为您提供了比arr多一级的迭代。只需更改lambda以迭代内部级别:lambda x: [num**2 for num in x]... -
您也可以将当前
lambda的内容修改为独立的理解:print([[num**2 for num in lst] for lst in arr]),不需要map -
哦,好吧,所以理解中的理解将在列表列表中迭代并返回相同的结构作为结果?有趣
-
你也可以使用
map两次:arr = list(map(lambda sub: list(map(lambda x: x**2, sub)), arr)) -
map两次看起来不太干净,我认为嵌套理解或map+comprehension更干净。