[英]Python Map function syntax
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 的簡單和更清晰的視圖,請查看:
並且在地面上說話 lambda function 可以替換為我們用於在 python 中定義用戶定義函數的def
關鍵字。 在 lambda 中,我們在一行中編寫了相同的內容。 現在顯然您不能將每個用戶定義的函數都設為 lambda。 所以要視情況而定。
謝謝你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.