Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么这个理解返回一个生成器?_Python_List_Pandas_List Comprehension - Fatal编程技术网

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的列表理解可能不会像预期的那样,参见。