2013-09-23 4 views
2

У меня есть список, содержащий значения (кортежи в моем случае) - в начале есть 1 элемент. Мне нужно перебрать список, а последнее значение в списке применимо к некоторым вычислениям, которые предоставят мне следующий элемент списка. После этого мне нужно объединить эти списки и использовать последнее значение списка для вычисления следующего элемента. И так далее ...python loop over постоянно расширяющийся список

Как это можно сделать? NumPy также может использоваться.

Теперь я, как это, но он не работает

while True: 
    lst = [1] 
    print(lst) 
    for i in range(len(lst)): 
     elem = lst[-1] 
     new = elem + 10 // dummy computations 
     lst.append(new) 
+0

Пожалуйста, дайте СМА Пример или первая попытка, чтобы мы могли понять, что вам нужно. – askewchan

+0

Вы говорите о ленивых списках? – 6502

+0

добавленный код того, что я делаю сейчас – Bob

ответ

2

Как это для начала?

def f(x): 
    return 2*x+1 

a = [ 1 ] 
while len(a) < 8: 
    x = a[-1] 
    y = f(x) 
    a.append(y) 

a 
=> [1, 3, 7, 15, 31, 63, 127, 255] 
+1

Для такой простой функции вы, вероятно, захотите сделать что-то вроде: 'idx = np.arange (8-1); x = 1; a = [x]; a.extend (список (2 ** (idx + 1) * x + np.cumsum (2 ** idx))). Но это может быть сложно для общих функций. – Jaime

3

Если вы хотите перебрать список позже, вы можете создать генератор:

def f(elem): 
    return elem + 10 

def lst(init): 
    yield init 
    while True: 
     next = f(init) 
     yield next 
     init = next 

Это продолжается вечно, так что ваш цикл имеет некоторый перерыв в нем:

for i in lst(1): 
    print i 
    if i > 100: 
     break 

печатает:

1 
11 
21 
31 
41 
51 
61 
71 
81 
91 
101