Rob*_*uld 44 zip functional-programming clojure
我最近看到了一些Clojure或Scala(对不起,我不熟悉它们),他们确实在列表或类似的东西上拉链.什么是拉链,它来自哪里?
Pav*_*aev 73
Zip是在您输入两个输入序列时产生的输出序列,其中使用某个函数组合来自相同位置的输入序列的每两个元素.Haskell中的一个例子:
输入:
zipWith (+) [1, 2, 3] [4, 5, 6]
Run Code Online (Sandbox Code Playgroud)
输出:
[5, 7, 9]
Run Code Online (Sandbox Code Playgroud)
以上是一个更通用的定义; 有时,zip
具体是指将元素组合为元组.例如在Haskell再次:
输入:
zip [1, 2, 3] [4, 5, 6]
Run Code Online (Sandbox Code Playgroud)
输出:
[(1, 4), (2, 5), (3, 6)]
Run Code Online (Sandbox Code Playgroud)
更通用的版本称为"zip with".您可以将"zip"视为"zipWith"的特例:
zip xs ys = zipWith (\x y -> (xs, ys)) xs ys
Run Code Online (Sandbox Code Playgroud)
dru*_*dru 20
zip是一种常见的函数式编程方法,如map或fold.您将在早期的lisps中找到这些函数,一直到ruby和python.它们旨在对列表执行常见的批处理操作.
在这种特殊情况下,zip需要两个列表,并从这些列表中创建一个新的元组列表.
例如,假设您有一个列表(1,2,3)和另一个列表("一个","两个","三个")如果您将它们压缩在一起,您将得到List((1,"one") ),(2,"两个"),(3,"三个"))
或者从scala命令行,你会得到:
scala> List(1,2,3).zip(List("one","two","three"))
res2: List[(Int, java.lang.String)] = List((1,one), (2,two), (3,three))
Run Code Online (Sandbox Code Playgroud)
当我第一次在Python中看到它而不知道函数式编程时,我认为它与压缩格式有关.在我学习了更多关于函数式编程的知识后,我越来越多地使用它了.
bse*_*old 10
Unfortunatley我没有足够的分数甚至对最佳答案发表评论,但是
zip xs ys = zipWith xs ys (\x y -> (xs, ys))
Run Code Online (Sandbox Code Playgroud)
是错的,它应该是:
zip xs ys = zipWith (\x y -> (x,y)) xs ys
Run Code Online (Sandbox Code Playgroud)
或者干脆:
zip = zipWith (\x y -> (x,y))
Run Code Online (Sandbox Code Playgroud)
您可以在Python中使用以下代码:
>>> a = [1,2]
>>> b = [3,4]
>>> zip(a,b)
[(1,3),(2,4)]
Run Code Online (Sandbox Code Playgroud)
帕维尔的答案几乎描述了它.我只是提供一个F#示例:
let x = [1;2]
let y = ["hello"; "world"]
let z = Seq.zip x y
Run Code Online (Sandbox Code Playgroud)
值z
将是包含两个序列中相同位置的项目元组的序列:
[(1, "hello"); (2, "world")]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
24446 次 |
最近记录: |