使用其他功能的输入创建列表的功能

时间:2019-01-17 06:32:13

标签: python list function iteration

我有一个函数,它将运行几次(在递归函数中,因此带有“ while”条件)。每次运行时,它将return某个整数。因此,例如,第一次运行returns3,第二次运行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=[]有关,但是我该如何解决呢?

4 个答案:

答案 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)))