list - F# 获取一个对列表并返回一个对

标签 list f# fst

尝试获取对列表并返回 x 值乘以 y 值的对:例如: mult [(x,y);(x,y);(x,y)] 将是 (xxx,yyy) mult [(1,2);((1,2);(1,2)] 将返回 (1,8)

尝试使用map fst 来做到这一点并且不使用递归 目前我的代码是:

let mult li = 
    match li with map fst li

对 f# 还算陌生

最佳答案

如果我理解正确,您有一个 2 元组数字列表,并且您想要返回一个 2 元组,其中第一个元素表示列表中所有第一个元素的乘积,并且第二个元素同样表示列表中所有第二个元素的乘积。对吗?

最简单的方法可能是这样的:

let mult li = 
    let a,b = List.unzip li
    let product = List.fold (*) 1
    (product a, product b)

据我所知,F# 默认情况下不包含 List.product 高阶函数,因此为了方便起见,我创建了一个。关于此乘积函数需要注意的一件事是,如果在空列表上调用它将返回 1(因为 1 是它的起始值)。如果您需要替代行为,最好的办法是在列表上进行模式匹配并在普通列表上进行折叠,但在空列表上返回默认值。您可以使用List.reduce (*),但这会在空列表上引发异常。

使用输入 [(1,2);(1,2);(1,2)] 在 FSI 中对此进行测试,得到结果 (1,8)。

如果您想使用 fstsnd 函数,那么您可以将其修改为:

let mult li = 
    let a = List.map fst li
    let b = List.map snd li
    let product = List.fold (*) 1
    (product a, product b)

List.unzip 显然更容易(而且可能更高效,因为我认为它只需要迭代列表一次)

关于list - F# 获取一个对列表并返回一个对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53160878/

相关文章:

c# - 使用 libgit2sharp 从远程 (git show) 下载一个文件

java - FST 可以很好地(反)序列化为 JSON,但默认配置存在问题

python - 比较 python 中 sql 的两个列表并使用 pandas.io 显示结果

python - 如何快速找出导致错误的列表?

php - 如何使用 PHP 列出 Google Cloud Storage 中存储桶中的所有文件?

generics - 管道运算符(operator)拒绝工作

Python将变长列表写入txt文件

f# - 邮箱处理器和异常

machine-learning - 如何限制 LSTM 模型中的序列预测以匹配特定模式?

python - 如何使用 OpenFST python 扩展从 fst 模型获取输入符号?