为什么这种理解会返回生成器?

时间:2018-07-04 20:13:49

标签: python list pandas list-comprehension

这是我刚才阅读的跟进问题:DataFrame, apply, lambda, list comprehension

所以我尝试了以下代码

import pandas as pd

# This is a dataframe containing the correct values
correct = pd.DataFrame([{"letters":"abc","data":1},{"letters":"ast","data":2},{"letters":"bkgf","data":3}])

# This is the dataframe containing source data
source = pd.DataFrame([{"c":"ab"},{"c":"kh"},{"c":"bkg"}])

temp_result = source["c"].apply(lambda x: i for (i,row) in correct.values)

所以我尝试了这样的不同变化

temp_result = source["c"].apply(lambda x: i for (i,row) in correct.iteritems())

所有人都返回错误:Genrator object is not callable 所以我的问题是为什么它返回一个生成器而不是将其视为项目列表?我知道什么是生成器表达式,但是我无法理解为什么将此表达式视为生成器而不是列表推导(或lambda表达式)?

1 个答案:

答案 0 :(得分:1)

列表推导式带有[]方括号。 如果没有[]方括号,则有一个生成器表达式

.apply(lambda x: (i for (i,row) in correct.iteritems())) 

上面的代码将创建一个返回生成器表达式的函数,并将其传递给.apply

.apply([lambda x: i for (i,row) in correct.iteritems()]) 

上面的代码将创建一个函数列表,并将该列表传递给.apply

.apply(lambda x: [i for (i,row) in correct.iteritems()]) 

上面的代码将使函数返回列表,并将其传递给.apply