如何使用list comprehension重写这个map()示例?

时间:2014-05-30 08:24:52

标签: python-3.x map lambda list-comprehension nested-lists

orders = [ ["34587",("5464", 4, 9.99), ("8274",18,12.99), ("9744", 9, 44.95)], 
           ["34588",("5464", 9, 9.99), ("9744", 9, 44.95)],
           ["34588",("5464", 9, 9.99)],
           ["34587",("8732", 7, 11.99), ("7733",11,18.99), ("9710", 5, 39.95)] ]

我想要一个新的结果列表,第一个元素(" 34587")和元组中的其他元素相乘(例如:4 * 9.99,18 * 12.99,9 * 44.95)

可以使用map()

来实现

list(map(lambda x: [x[0]] + list(map(lambda y: y[1]*y[2], x[1:])), orders))

结果:

[['34587', 39.96, 233.82, 404.55], ['34588', 89.91, 404.55], ['34588', 89.91], ['34587', 83.93, 208.89, 199.75]]

问题是,这个map()示例可以重写为列表理解吗?

感谢。

1 个答案:

答案 0 :(得分:3)

在一条评论中,使用lambda映射:

list(map(lambda y: expression_involving_y, elements))

可与列表推导交换:

[expression_involving_y for y in elements]

您可以从替换内部地图开始:

list(map(lambda x: [x[0]] + list(map(lambda y: y[1]*y[2], x[1:])), orders))

elementsx[1:]expression_involving_yy[1]*y[2]

list(map(lambda x: [x[0]] + [ y[1]*y[2] for y in x[1:] ], orders))

你可以重复替换以最终得到你的结果:

[ [x[0]] + [ y[1]*y[2] for y in x[1:] ] for x in orders ]