簡體   English   中英

遞歸列表填寫 python

[英]Recursive list filling in python

有時我需要遞歸地填充列表,到目前為止,我總是這樣做(簡單的例子,這也適用於復雜的遞歸列表,例如指數移動平均線):

In [1]: def complex_func(a,b):
   ...:     return a + b
   ...: 
   ...: recursive_list = [1, 2]
   ...: for i in range(9):
   ...:     recursive_list.append(complex_func(
   ...:         recursive_list[-2],
   ...:         recursive_list[-1]
   ...:     ))
   ...: recursive_list
Out[1]: [1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]

有沒有辦法更好地做到這一點? 更好的意思是更多的pythonic甚至更快。 我感覺這不是最好的方法。

也許是這樣的(這是行不通的):

In [1]: recursive_list = [1, 2, complex_func(
   ...:         recursive_list[-2],
   ...:         recursive_list[-1]
   ...:     ) for i in range(9)]

您可以使用range

start = 1
times = 9
res = list(range(start, start + times + 1))
print(res)

目前尚不清楚為什么需要遞歸。 您只引用列表末尾的單個值,因此您只需要一個變量來跟蹤該值。

seed = 1
my_list = []
for i in range(10):
    my_list.append(seed)
    seed = seed + 1

如果您不介意外部模塊,請安裝more-itertools並使用iterate

>>> from more_itertools import iterate
>>> from itertools import islice
>>> list(islice(iterate(lambda x: x + 1, 1), 10))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

對於斐波那契數,使用兩個種子:

seed1 = 0  # my_list[-2]
seed2 = 1  # my_list[-1]
my_list = []
for i in range(10):
    my_list.append(seed1)
    seed1, seed2 = seed2, seed1 + seed2

您可以使用擴展方法:

def complex_func(a,b): return a+b

L = [1,2]
L.extend(complex_func(*L[-2:]) for _ in range(9))

print(L)
[1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM