Функция, которая создает списки с вводом из другой функции - PullRequest
0 голосов
/ 17 января 2019

У меня есть функция, которая будет запускаться пару раз (в рекурсивной функции, то есть с условием 'while'). Каждый раз, когда он запускается, он будет return определенным целым числом. Например, в первый раз он запускает returns a 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=[] в самом начале функции, но как я могу обойти это?

Ответы [ 4 ]

0 голосов
/ 17 января 2019

Другие пользователи уже указали на возможность использовать список непосредственно в первом методе, но я бы предложил один из способов реорганизации вашего кода, чтобы он работал.

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]
0 голосов
/ 17 января 2019

с помощью генератора вы можете сделать это так, лучше, читабельнее и более питонически

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]
0 голосов
/ 17 января 2019

Следующие коды находятся под Python2.7

Использование islice в itertools может обработать ваш случай

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)))
0 голосов
/ 17 января 2019

вы создаете пустой factor_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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...