我有一个函数,它将运行几次(在递归函数中,因此带有“ while”条件)。每次运行时,它将return
某个整数。因此,例如,第一次运行returns
和3
,第二次运行5
,第三次运行9
。
现在,我需要将这些returns
保存在列表中。所以我想创建一个单独的函数,将这些值存储起来。因此,我要寻找的最终状态是拥有一个list = [3,5,8]
。
B = [3,6,5,7,8,10]
def function_1(A):
for i in range(len(A)/2):
factor = A[2*i]
list_of_diagonals(factor)
return factor`
def list_of_diagonals(d):
factor_list = []
factor_list = factor_list.append(d)
return factor_list`
现在,我希望print function_1(B)
会产生[3,5,8]
,但只会产生8
。
我认为这与我在函数开始时定义factor_list=[]
有关,但是我该如何解决呢?
答案 0 :(得分:3)
使用生成器,您可以通过这种方式来做到这一点,更好,更易读,更Python化
B = [3,6,5,7,8,10]
def function_1(A):
for i in range(len(A)//2):
factor = A[2*i]
yield factor
result = list(function_1(B))
# output [3, 5, 8]
答案 1 :(得分:1)
每当对角线列表调用发生时,您都会创建一个空的factor_list。实际上,您不需要其他功能即可将结果存储在list中,请尝试以下代码:
B = [3,6,5,7,8,10]
def function_1(A):
l1 = []
for i in range(len(A)/2):
factor = A[2*i]
l1.append(factor)
return l1
print function_1(B)
答案 2 :(得分:1)
其他用户已经在第一种方法中指出了直接使用列表的选项,但是我建议一种重构代码以使其正常工作的方法。
def function_1(array):
list_of_diagonals_ = [] # <-- initialize the recipient
for i in range(len(array)//2): # <-- # // to return integer
factor = array[2*i]
list_of_diagonals_ = list_of_diagonals(factor, list_of_diagonals_) # <-- call the function and store to recipient
return list_of_diagonals_ # <-- return the recipient
def list_of_diagonals(element, factor_list = None): # <-- need an argument to memorize past results
if factor_list == None: factor_list = [] # <-- just in case
factor_list.append(element)
return factor_list
B = [3,6,5,7,8,10]
print (function_1(B))
#=> [3, 5, 8]
答案 3 :(得分:0)
以下代码在Python2.7下
在itertools中使用islice可以处理您的案件
from itertools import islice
B = [3, 6, 5, 7, 8, 10]
def function_1(A):
return islice(A, 0, None, 2)
# [3, 5, 8]
print(list(function_1(B)))