如何构建列表理解,需要在每次迭代中访问列表中的多个元素?

时间:2017-10-13 19:38:19

标签: python list for-loop list-comprehension

如何编写一个列表理解来访问列表的每个元素,和两边相邻的

我想访问每个元素,并且两边相邻,应用一个函数,并将结果作为列表的新值返回。

在for循环中,很容易:

lst=[1, 30, 40, 2, 7, 8, 9, 22, 7, 8, 44, 39, 2, 1, 0, 88, 17]

for ii in list(range(3,len(lst)-3)):
    vals=lst[ii-2:ii+3]
    new_val=np.mean(vals)
    lst[ii]=new_val

如何在列表理解中访问这些元素 - 即无法通过元素位置访问?

1 个答案:

答案 0 :(得分:0)

只是为了显示一个有用的模式,list comp可以使用zip的滞后索引切片的lst

lst=[1, 30, 40, 2, 7, 8, 9, 22, 7, 8, 44, 39, 2, 1, 0, 88, 17]

[sum(vals)/3. for vals in zip(lst, lst[1:], lst[2:])]
Out[8]: 
[23.666666666666668,
 24.0,
 16.333333333333332,
 5.666666666666667,
 8.0,
 13.0,
 12.666666666666666,
 12.333333333333334,
 19.666666666666668,
 30.333333333333332,
 28.333333333333332,
 14.0,
 1.0,
 29.666666666666668,
 35.0]

一个笨拙的解决方案:

np.convolve(lst, [1/3., 1/3., 1/3.], 'valid')
Out[11]: 
array([ 23.66666667,  24.        ,  16.33333333,   5.66666667,
         8.        ,  13.        ,  12.66666667,  12.33333333,
        19.66666667,  30.33333333,  28.33333333,  14.        ,
         1.        ,  29.66666667,  35.        ])