gpt4 book ai didi

F#,循环控制直到 n-2

转载 作者:行者123 更新时间:2023-12-01 06:49:55 27 4
gpt4 key购买 nike

我目前正在学习函数式编程和 F#,我想做一个循环控制直到 n-2。例如:

Given a list of doubles, find the pairwise average,
e.g. pairwiseAverage [1.0; 2.0; 3.0; 4.0; 5.0] will give [1.5; 2.5; 3.5; 4.5]

在做了一些实验和搜索之后,我有几种方法可以做到:

方法一:
let pairwiseAverage (data: List<double>) = 
[for j in 0 .. data.Length-2 do
yield (data.[j]+data.[j+1])/2.0]

方法二:
let pairwiseAverage (data: List<double>) =
let averageWithNone acc next =
match acc with
| (_,None) -> ([],Some(next))
| (result,Some prev) -> ((prev+next)/2.0)::result,Some(next))

let resultTuple = List.fold averageWithNone ([],None) data

match resultTuple with
| (x,_) -> List.rev x

方法三:
let pairwiseAverage (data: List<double>) =
// Get elements from 1 .. n-1
let after = List.tail data

// Get elements from 0 .. n-2
let before =
data |> List.rev
|> List.tail
|> List.rev

List.map2 (fun x y -> (x+y)/2.0) before after

我只是想知道是否有其他方法可以解决这个问题。谢谢你。

最佳答案

仅使用内置函数:

list |> Seq.windowed 2 |> Seq.map Array.average

Seq.windowed n 为您提供每个 n 元素的滑动窗口。

关于F#,循环控制直到 n-2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42761575/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com