例如在这个列表中:
arr = [1.0, 1.0, None, 3.0, None, 5.0, 5.0, 5.0, None, 1.0, 2.0, 3.0]
我需要None
用它们的邻居的平均值替换所有的,而不使用循环或附加函数(仅lambda
)。
结果应该是这样:
[1.0, 1.0, **2.0**, 3.0, **4.0**, 5.0, 5.0, 5.0, **3.0**, 1.0, 2.0, 3.0]
我试图通过使用来做到这一点map
:
arr = list(map(lambda x: (arr[arr.index(None) - 1] + arr[arr.index(None) + 1]) / 2 if not x else x, arr))
问题是arr.index(None)
它只被调用一次并返回2
,而不是计算下一个None
的索引。所以这样的结果是:
[1.0, 1.0, **2.0**, 3.0, **2.0**, 5.0, 5.0, 5.0, **2.0**, 1.0, 2.0, 3.0]
任何帮助将不胜感激。
编辑:假设 None 不能出现在乞讨或结尾。也不能出现在行中。
您展示的示例可以通过以下方式解决:
arr = [1.0, 1.0, None, 3.0, None, 5.0, 5.0, 5.0, None, 1.0, 2.0, 3.0]
indices = range(1, len(arr)-1)
arr_new = [arr[0]] + list(map(lambda i: (arr[i-1] + arr[i+1])/2 if arr[i] is None else arr[i], indices)) + [arr[-1]]
print arr
print arr_new
但是:您还没有说明如果第一个或最后一个元素 isNone
或者彼此相邻的两个元素 areNone
会发生什么,因此这些情况在这里会失败。
输出:
[1.0, 1.0, None, 3.0, None, 5.0, 5.0, 5.0, None, 1.0, 2.0, 3.0]
[1.0, 1.0, 2.0, 3.0, 4.0, 5.0, 5.0, 5.0, 3.0, 1.0, 2.0, 3.0]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句