Python:如何在列表理解中引用自己?

Hir*_*chi 2 python list-comprehension self-reference

lsit_a = [2, 4, 3, 6, 3, 8, 5]
Run Code Online (Sandbox Code Playgroud)

列表理解非常有用。

list_b = [a**2 for a in list_a]
Run Code Online (Sandbox Code Playgroud)

我想知道如何在python列表理解中编写自引用。

例如 -

list_c = [a**2 if i == 0 else a*2 + (itself[i-1]) for i, a in enumurate(list_a)]
Run Code Online (Sandbox Code Playgroud)

怎么写的一部分itself[i-1]

对不起,我的解释不好。

我想通过高速方式获得这份清单。

输入清单

list_a = [0,0,1,0,0,0,1,0,0,1,0]

输出清单

list_c = [0,0,1,0.9,0.8,0.7,1,0.9,0.8,1,0.9]

就像锯齿列表。

And*_*ini 5

对于最直接的用例,列表理解是一种紧凑的表达方式。您不能在列表理解中引用列表本身,因为只能使用常规的for循环:

list_c = []
for i, a in enumerate(list_a):
    if i == 0:
        list_c.append(a ** 2)
    else:
        list_c.append(a * 2 + list_c[i-1])
Run Code Online (Sandbox Code Playgroud)

您还可以以更有效的方式重写该循环:

list_a_iterator = iter(list_a)
list_c = [next(list_a_iterator) ** 2]  # May raise StopIteration if list_a is empty
for item in list_a_iterator:
    list_c.append(item * 2 + list_c[-1])
Run Code Online (Sandbox Code Playgroud)