基于lambda函数变换的Python列表理解

2024-04-24 16:35:48 发布

您现在位置:Python中文网/ 问答频道 /正文

为了简单起见,假设我有一个只有两行的小语料库。你知道吗

'This is first'
'This is second'

为了将其用于我的reduceByKey spark方法,我需要有以下输出:

[((u'This', u'is'), 1), ((u'is', u'first.'), 1), ((u'This', u'is'), 1), ((u'is', u'second.'), 1)]

但是对于我在下面编写的代码,我采用了以下格式(更多列表)。检查我的愿望解决方案是否在一个“列表”中,但我得到的输出有更多(取决于我每句话的字数)

[[((u'This', u'is'), 1), ((u'This', u'first.'), 1)], [((u'is', u'first.'), 1)], [((u'This', u'is'), 1), ((u'This', u'second.'), 1)], [((u'is', u'second.'), 1)]]

如何修改这个以得到我想要的。你知道吗

couples = lines.map(lambda s : s.split(" ")).flatMap(lambda s: [[((s[i],s[j]), 1) for j in range(i+1 , len(s))] for i in range(len(s)-1) ])

如果有人不知道pyspark,但是很好的python,我想修改这部分:

lambda s: [[((s[i],s[j]), 1) for j in range(i+1 , len(s))] for i in range(len(s)-1) ]

提前谢谢


Tags: 方法lambda代码in列表forlenis
1条回答
网友
1楼 · 发布于 2024-04-24 16:35:48

在python中,没有返回值扩展。这意味着您需要显式地写出返回值。这意味着lambda必须返回一个列表。名单扁平化必须在外面处理。它可以以不同的方式实现。例如

reduce(lambda a,b: a+b, lines.map(...).flatMap(...))

相关问题 更多 >