Python 使用另一个函数的输入创建列表的函数
我有一个函数将运行几次(在递归函数中,因此带有“while”条件)。每次运行时,它将Python 使用另一个函数的输入创建列表的函数,python,list,function,iteration,Python,List,Function,Iteration,我有一个函数将运行几次(在递归函数中,因此带有“while”条件)。每次运行时,它将返回一个特定的整数。因此,例如,它第一次运行时返回a3,第二次返回5,第三次返回9 现在我需要将这些返回值保存在列表中。所以我想创建一个单独的函数来获取这些值并存储它们。所以我要寻找的终端状态是有一个列表=[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]
返回一个特定的整数。因此,例如,它第一次运行时返回a3
,第二次返回5
,第三次返回9
现在我需要将这些返回值
保存在列表中。所以我想创建一个单独的函数来获取这些值并存储它们。所以我要寻找的终端状态是有一个列表=[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`
现在我希望打印函数\u 1(B)
会产生[3,5,8]
,但它只会产生8
我认为这与我在函数的开头定义了factor\u list=[]
这一事实有关,但我如何解决这个问题呢?每当对角线列表调用时,您都会创建空的factor\u 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)
每当对角线列表调用发生时,您都在创建空因子列表。实际上,在列表中存储结果不需要其他函数,请尝试以下代码:
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)
使用生成器,您可以这样做,更好,可读性更好,更具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]
使用生成器,您可以这样做,更好,可读性更好,更具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]
以下代码在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)))
以下代码在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)))
其他用户已经指出了在第一种方法中直接使用列表的选项,但我建议使用一种方法来重构代码以使其正常工作
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]
def函数_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]
def函数_1(阵列):
对角线列表u=[]。#您刚刚从函数1
返回了因子
,它保存了A[2*i]
的最后一个迭代值。您尝试过使用yield
吗?我不认为“递归”与“while”条件相同。您的代码中也没有while
语句。只是一个for
循环。我不熟悉收益率。但是我在第一个函数中返回factor
,只是为了确保在第二个函数中可以使用它。我在第二个中返回factor_list
,以便稍后使用,对吗?@SpghttCd函数必须在调用之前定义,而不是在它出现在另一个定义中之前。Python只是在运行时在globals dict中查找名称。我看不出函数的顺序有任何问题。你只是从function_1
返回factor
,它保存了A[2*I]
的最后一个迭代值。你试过使用yield
吗?我认为“递归”与“while”条件不同。您的代码中也没有while
语句。只是一个for
循环。我不熟悉收益率。但是我在第一个函数中返回factor
,只是为了确保在第二个函数中可以使用它。我在第二个中返回factor_list
,以便稍后使用,对吗?@SpghttCd函数必须在调用之前定义,而不是在它出现在另一个定义中之前。Python只是在运行时在globals dict中查找名称。我看不出函数的顺序有任何问题。在发布之前你检查过了吗。这似乎不起作用。@VineethSai什么不起作用?你能解释一下吗?对它正在工作,我正在获得所需的输出[3,5,8]
也许是因为在python3.xTypeError中range是一个生成器的问题:'float'对象不能解释为整数
奇怪。。在我这边,它工作得很好。。我正在使用python。。。您是否使用相同的B列表?在发布前是否检查过。这似乎不起作用。@VineethSai什么不起作用?你能解释一下吗?对它正在工作,我正在获得所需的输出[3,5,8]
也许是因为在python3.xTypeError中range是一个生成器的问题:'float'对象不能解释为整数
奇怪。。在我这边,它工作得很好。。我正在使用python。。。你使用的是同一个B列表吗?@Math初学者,这是我说的yield
。@Math初学者,这是我说的yield
。很好,我很感激它,它对我的理解绝对有用。很好,我很感激它,它对我的理解绝对有用。