如何编写一个列表理解来访问列表的每个元素,和两边相邻的?
我想访问每个元素,并且两边相邻,应用一个函数,并将结果作为列表的新值返回。
在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
如何在列表理解中访问这些元素 - 即无法通过元素位置访问?
答案 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. ])