【发布时间】:2017-01-26 20:29:54
【问题描述】:
为了展平嵌套列表,我总是成功地使用列表推导式或 itertools.chain.from_iterable。
但是,使用 pyspark,我需要通过映射 lambda 函数来展平(元组)列表列表,并且由于某种原因,我无法“转换”这个成功的列表理解:
z = [[(1,2),(2,3),(3,4)],[(5,6),(7,8),(9,10)]]
[(j,k) for sublist in z for j,k in sublist]
[(1, 2), (2, 3), (3, 4), (5, 6), (7, 8), (9, 10)] # right answer
到等价的 map/lambda 等价物:
list(map(lambda z: [(j,k) for sublist in z for j,k in sublist],z))
TypeError: 'int' object is not iterable
这快把我逼疯了!我做错了什么?
【问题讨论】:
-
map无法做到这一点。你需要fold/reduce。 -
@JaredSmith 你可以用地图以完全卑鄙的方式做到这一点......
-
@juanpa.arrivillaga 鉴于 OP 知道
itertools.chain.from_iterable,我想知道我们是否还没有结束... -
完全揭示:我必须使用 map/lambda,因为我实际上是在尝试使用 pyspark 展平 RDD,并且希望避免将整个 RDD 转换为列表然后展平(使用,例如例如,itertools、reduce 等),因为它非常大。
-
@pniessen 所以这听起来像是 XY 问题。也许您可以在问题中详细说明上述内容...
标签: python list lambda list-comprehension