用lambda函数转换理解Python列表

用lambda函数转换理解Python列表,python,lambda,pyspark,list-comprehension,Python,Lambda,Pyspark,List Comprehension,为了简单起见,假设我有一个只有两行的小语料库 '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)] 但是使用我在下面编写的代码,我采用了以下格式:更多列表。检查我的愿望解决方案是否在一个“列表”中,但我得到的输出

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

'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) ]

提前感谢

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

reduce(lambda a,b: a+b, lines.map(...).flatMap(...))
try:lambda s:[s[i],s[j],1代表rangelens中的i-1代表rangei+1中的j,lens]