簡體   English   中英

Python Map function 語法

[英]Python Map function syntax

我現在到 Python 並且無法理解以下行

working_docs = [map(lambda (sid, sent): (sid, [sent]), d) for d in tokenized_docs]

我用谷歌搜索了“map”和“lambda”,但這條線不符合。 它想做什么? 你能把它翻譯成簡單的代碼嗎?

tokenized_docs是一個元組列表,其值如下: 在此處輸入圖像描述

Python 3 不允許在 lambda 表達式的參數列表中解包元組。 您需要lambda x: (x[0], [x[1]])代替。

在 Python 2 中,給定的代碼將創建一個列表列表。 但是, map現在是 class 而不是 function,因此您需要從生成的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應用於toeknized_docs中的每個d

map(g, itr)

這將 function g應用於itr中的每個元素,產生一個可迭代的。 list(map(g, itr)等價於[g(i) for i in itr]

lambda (sid, sent): (sid, [sent])

這接受一個元組並返回相同的元組,但其第二個元素為 singleton 列表

我認為這更容易看到

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]

如果沒有 map 和列表理解可以寫成:

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

不清楚 tokenised_list 的格式是什么。

不管怎樣,

如果您仍然想以此類格式使用 map 和 lambda 我認為以下示例可以讓您清楚:

示例 1:

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

Output: [[1, 'akshay'], [2, 'laksshay']]

示例 2:

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

Output:[(1,['akshay']),(2,['laksshay'])]

示例 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 is a list of two lambda function objects( the lambda functions that will convert for example (1,'akshay') to [1,['akshay']].

wd=[map(lambda x,y:[x,[y]],td) for x,y in td]

Output:wd 現在是兩個 map 對象的列表。

Map function 的優點是可以保存您的 memory。 否則,您可以按照自己的方式使用第三個示例。

我希望這些示例能幫助您理解,如果您能更好地了解標記化列表,那就更好了。

要獲得 map function 的簡單和更清晰的視圖,請查看:

如何以更簡單的方式編寫 map?

並且在地面上說話 lambda function 可以替換為我們用於在 python 中定義用戶定義函數的def關鍵字。 在 lambda 中,我們在一行中編寫了相同的內容。 現在顯然您不能將每個用戶定義的函數都設為 lambda。 所以要視情況而定。

謝謝你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM