Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.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_Function_Iteration - Fatal编程技术网

Python 使用另一个函数的输入创建列表的函数

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]

我有一个函数将运行几次(在递归函数中,因此带有“while”条件)。每次运行时,它将
返回一个特定的整数。因此,例如,它第一次运行
时返回
a
3
,第二次返回
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.x
TypeError中range是一个生成器的问题:'float'对象不能解释为整数
奇怪。。在我这边,它工作得很好。。我正在使用python。。。您是否使用相同的B列表?在发布前是否检查过。这似乎不起作用。@VineethSai什么不起作用?你能解释一下吗?对它正在工作,我正在获得所需的输出
[3,5,8]
也许是因为在python3.x
TypeError中range是一个生成器的问题:'float'对象不能解释为整数
奇怪。。在我这边,它工作得很好。。我正在使用python。。。你使用的是同一个B列表吗?@Math初学者,这是我说的
yield
。@Math初学者,这是我说的
yield
。很好,我很感激它,它对我的理解绝对有用。很好,我很感激它,它对我的理解绝对有用。