Python函数不工作
我试图创建一个函数,新的函数,它以一个数字作为参数。 此函数将根据作为参数传递的数字来操作列表中的值。在这个函数中,我将放置另一个函数new_sum,它负责处理列表中的值。 例如,如果我将4传递给新的_函数,我需要新的_函数在前四个元素中的每一个上运行新的_和。相应的值将更改,我需要创建四个新列表 例如:Python函数不工作,python,list,function,Python,List,Function,我试图创建一个函数,新的函数,它以一个数字作为参数。 此函数将根据作为参数传递的数字来操作列表中的值。在这个函数中,我将放置另一个函数new_sum,它负责处理列表中的值。 例如,如果我将4传递给新的_函数,我需要新的_函数在前四个元素中的每一个上运行新的_和。相应的值将更改,我需要创建四个新列表 例如: listone=[1,2,3,4,5] def new_function(value): for i in range(0,value): new_list=listo
listone=[1,2,3,4,5]
def new_function(value):
for i in range(0,value):
new_list=listone[:]
variable=new_sum(i)
new_list[i]=variable
return new_list
# running new_function(4) should return four new lists
# [(new value for index zero, based on new_sum),2,3,4,5]
# [1,(new value for index one, based on new_sum),3,4,5]
# [1,2,(new value for index two, based on new_sum),4,5]
# [1,2,3,(new value for index three, based on new_sum),5]
我的问题是,我一直在得到一个巨大的名单。我做错了什么?修复
return
语句的缩进:
listone=[1,2,3,4,5]
def new_function(value):
for i in range(0,value):
new_list=listone[:]
variable=new_sum(i)
new_list[i]=variable
return new_list
return new_list
的问题是,一旦return
,该功能就完成了
通过累积结果并在最后返回所有结果,您可以使事情变得更加复杂:
listone=[1,2,3,4,5]
def new_function(value):
new_lists = []
for i in range(0,value):
new_list=listone[:]
variable=new_sum(i)
new_list[i]=variable
new_lists.append(new_list)
return new_lists
然而,这正是生成器的用途:如果您屈服
而不是返回
,则会给调用者一个值,然后在调用者请求下一个值时恢复。因此:
listone=[1,2,3,4,5]
def new_function(value):
for i in range(0,value):
new_list=listone[:]
variable=new_sum(i)
new_list[i]=variable
yield new_list
不同之处在于,第一个版本为调用方提供了一个包含四个列表的列表,而第二个版本为调用方提供了一个包含四个列表的迭代器。通常,您并不关心差异,事实上,迭代器出于响应性、内存或性能方面的原因可能更好*
如果您真的在意,那么在需要迭代器的地方列出迭代器通常更有意义。换句话说,使用函数的第二个版本,然后只写:
new_lists = list(new_function(4))
顺便说一句,您可以简化这一过程,方法是不尝试在适当的位置修改
new_list
,而只是在复制时更改值。例如:
def new_function(value):
for i in range(value):
yield listone[:i] + [new_sum(i)] + listone[i+1:]
*响应能力得到了提高,因为您可以在第一个结果准备好后立即获得它,而不是仅在它们都准备好之后。内存使用得到了改善,因为您不需要一次将所有列表保存在内存中,一次只保存一个列表。性能可能会提高,因为交错工作可以产生更好的缓存行为和管道。从OP代码的语义来看,看起来他实际上想要
产生,而不是返回,新列表。