Python 为什么这个理解返回一个生成器?
这是我刚才读到的后续问题: 所以我尝试了以下代码Python 为什么这个理解返回一个生成器?,python,list,pandas,list-comprehension,Python,List,Pandas,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 d
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())
然而,所有这些都返回错误:generator对象不可调用
所以我的问题是,为什么它会返回一个生成器,而不是将其视为一个项目列表?我知道生成器表达式是什么,但我无法理解为什么将此表达式视为生成器而不是列表理解(或lambda表达式)?列表理解有
[]
方括号。
如果没有[]
方括号,则有一个生成器表达式
.apply(lambda x: (i for (i,row) in correct.iteritems()))
上面的代码将生成一个返回生成器表达式的函数,并将其传递给.apply
.apply([lambda x: i for (i,row) in correct.iteritems()])
.apply(lambda x: [i for (i,row) in correct.iteritems()])
上面的代码将创建一个函数列表,并将该列表传递给。apply
.apply([lambda x: i for (i,row) in correct.iteritems()])
.apply(lambda x: [i for (i,row) in correct.iteritems()])
上面的代码将生成一个函数,返回一个列表,并将其传递给当前正在传递要应用的生成器的
.apply
。如果你的意思是lambda返回一个生成器,你需要添加括号。@jornsharpe抱歉,我不太确定在哪里添加偏执,因为我认为lambda语法将变得不正确?请给出一个例子或显示正确的表达式:)lambda x:(…)
。但我不清楚您期望的输出是什么。请尝试lambda x:[i for(i,row)in correct.iteritems()]
这样就无法修改此表达式,使其包含lambda
和列表理解?如果您确实想要列表理解,则必须添加方括号。否则你就无法列出理解力@穆罕默德·汉克斯!它起作用了:)我实际上不知道这个apply
和generators
的案例。今天学到了一些新东西:)lambdas的列表理解可能不会像预期的那样,参见。