Python映射函数语法

Python映射函数语法,python,Python,我现在学习Python,在理解下面这行代码时遇到了一些问题 working_docs = [map(lambda (sid, sent): (sid, [sent]), d) for d in tokenized_docs] 我在谷歌上搜索了“地图”和“lambda”,但这条线不一致。它想做什么?你能把它翻译成简单的代码吗 tokenized_docs是元组列表,其值如下: Python 3不允许在lambda表达式的参数列表中解包元组。您需要lambda x:[x[0],[x[1]]) 在P

我现在学习Python,在理解下面这行代码时遇到了一些问题

working_docs = [map(lambda (sid, sent): (sid, [sent]), d) for d in tokenized_docs]
我在谷歌上搜索了“地图”和“lambda”,但这条线不一致。它想做什么?你能把它翻译成简单的代码吗

tokenized_docs
是元组列表,其值如下:

Python 3不允许在lambda表达式的参数列表中解包元组。您需要
lambda x:[x[0],[x[1]])

在Python2中,给定的代码将创建一个列表列表<但是,code>map现在是一个类而不是一个函数,因此您需要从生成的
map
实例显式创建一个列表

working_docs = [list(map(lambda x: (x[0], [x[1]]), d)) for d in tokenized_docs]
但是,删除
map
和lambda表达式以支持列表理解会更简单

working_docs = [[(sid, [sent]) for sid, sent in d] for d in tokenized_docs]
细分:

working docs = [f(d) for d in tokenized_docs]
这个简单的方法创建一个新列表,其中
f
应用于
toenized\u文档中的每个
d

map(g, itr)
这将函数
g
应用于
itr
中的每个元素,生成一个iterable<代码>列表(map(g,itr)
相当于
[g(i)表示itr中的i]

lambda (sid, sent): (sid, [sent])
这将接收一个元组并返回相同的元组,但其第二个元素作为单例列表

我认为这更容易理解为

def f(tup):
    x, y = tup
    return x, [y]

return [[f(t) for t in d]           # this is a list in both python 2 and 3
        for d in tokenized_docs]

如果没有地图和列表,理解可以写成:

working_docs = []
for td in tokenized_docs:
    wd = []
    for (sid, sent) in td:
        wd.append((sid, [sent]))
    working_docs.append(wd)

目前尚不清楚标记化列表的格式

尽管如此

如果您仍然希望在此类格式中使用map和lambda,我认为以下示例可以让您明白:

例1:

td=[(1,'akshay'),(2,'laksshay')]
wd=[[x,y] for  x,y in td]
输出:[[1,'akshay'],[2,'Lakshay']]

例2:

td=[(1,'akshay'),(2,'laksshay')]
wd=[(d[0],[d[1]]) for d in td]
输出:[(1,['akshay']),(2,['Lakshay'])]

例3:

td=[(1,'akshay'),(2,'laksshay')]
list=[]
for i in td:
a,b=[j for j in i]
list.append(lambda a,b:[a,[b]])
Output:list是两个lambda函数对象的列表(例如,将(1,'akshay')转换为[1,['akshay']]的lambda函数)

输出:wd现在是两个贴图对象的列表

Map函数的优点是节省内存,否则您可以用自己的方式使用第三个示例

我希望这些示例有助于您理解,如果您能更好地查看标记化列表,将会更好。

要轻松、更清晰地查看地图功能,请查看:

在底层,lambda函数可以替换为
def
关键字,我们使用它来定义python中的用户定义函数。在lambda中,我们在一行中编写相同的内容。显然,您不能将每个用户定义的函数都作为lambda。因此这取决于具体情况


谢谢。

谢谢。这段代码来自Github,它是用Python 2编写的,现在我想用Python 3运行。在使用工作文档时,您的翻译在代码中创建了错误:对于工作文档中的文档:对于发送的文档id,文档中的短语:(此行中的错误:“TypeError:'int'对象不可编辑”)啊,好吧,看来我的目的是创建一个列表列表,所以我的第一点不适用。我会更新。谢谢。当我执行“工作\u文档=[[f(d)for f in d]for d in tokenized\u docs]”时,这一行返回错误“TypeError:“tuple”对象不可调用”谢谢,现在同一行的错误是“TypeError:“'u io.TextIOWrapper'对象不可调用”正如我所说,不是我的错误。您是否调用了两个东西f?
wd=[map(lambda x,y:[x,[y]],td) for x,y in td]