我最近看到一些Clojure或Scala(對不起,我不熟悉它們),他們在列表或類似的東西上拉鍊。什麼是zip,它是從哪裏來的?什麼是zip(函數式編程?)
41
A
回答
70
Zip是當你輸入兩個輸入序列,併產生一個輸出序列,其中來自同一位置的輸入序列中的每兩個元素都使用某個函數進行組合。在Haskell一個例子:
輸入:
zipWith (+) [1, 2, 3] [4, 5, 6]
輸出:
[5, 7, 9]
以上是更通用的定義;有時,zip
具體指的是將元素組合爲元組。例如。在Haskell再次:
輸入:
zip [1, 2, 3] [4, 5, 6]
輸出:
[(1, 4), (2, 5), (3, 6)]
而且更寬泛的版本被稱爲 「拉鍊帶」。您可以將「zip」視爲「zipWith」的特例:
zip xs ys = zipWith (\x y -> (xs, ys)) xs ys
19
zip是一種常見的函數式編程方法,如地圖或摺疊。你會發現這些函數在早期的Lisp中一直到ruby和python。它們旨在對列表執行常見的批處理操作。
在這種特殊情況下,zip會帶兩個列表並從這些列表中創建一個新的元組列表。例如,假設你有一個帶有(1,2,3)和另一個帶有(「一個」,「兩個」,「三個」)的列表 如果你將它們壓縮在一起,你會得到List( 1, 「1」),(2, 「兩節」),(3, 「三化」))
或階命令行,你會得到:
scala> List(1,2,3).zip(List("one","two","three"))
res2: List[(Int, java.lang.String)] = List((1,one), (2,two), (3,three))
當我第一次看到它在Python中,不知道函數式編程,我認爲它與壓縮格式有關。在我學習了更多關於函數式編程的知識後,我越來越多地使用它。
6
帕維爾的回答非常多地描述它。我只是提供了一個F#例如:
let x = [1;2]
let y = ["hello"; "world"]
let z = Seq.zip x y
的z
值將是包含項目的元組在相同的位置從兩個序列的序列:
[(1, "hello"); (2, "world")]
7
你可以使用下面的代碼在Python:
>>> a = [1,2]
>>> b = [3,4]
>>> zip(a,b)
[(1,3),(2,4)]
9
Unfortunatley我沒有足夠的積分,甚至離開頂部答案評論,但
zip xs ys = zipWith xs ys (\x y -> (xs, ys))
是錯誤,它應該是:
zip xs ys = zipWith (\x y -> (x,y)) xs ys
或者乾脆:
zip = zipWith (\x y -> (x,y))
相關問題
- 1. python中zip的反函數是什麼?
- 2. 爲什麼函數式編程很好?
- 3. 函數式編程的好處是什麼?
- 4. 組合性在函數式編程中是什麼意思?
- 5. 函數式編程中的副作用是什麼?
- 6. 什麼是「不可變變量」意味着函數式編程
- 7. 什麼是另一種編寫python3 zip的方式
- 8. ZIP代表什麼(壓縮格式,而不是郵政編碼)
- 9. 什麼是數據流中的python zip函數的等價物?
- 10. 什麼取代了函數式編程中的MVC模式?
- 11. 函數式編程函數
- 12. Java:如何編寫`zip`函數?什麼應該是返回類型?
- 13. 以下函數式編程模式的正確術語是什麼?
- 14. 什麼是編碼技術叫?函數[]()
- 15. 函數式編程
- 16. 函數式編程和數據庫交互的最佳實踐是什麼?
- 17. 在編程中,什麼是表達式?
- 18. 什麼是正式編程語言?
- 19. 函數式編程SOLID用於函數式編程
- 20. 以無點式編寫函數的一般方案是什麼?
- 21. 函數式編程教程
- 22. 爲什麼在main中隱式聲明函數? C編程
- 23. 什麼自平衡樹在函數式編程中最簡單?
- 24. 函數式編程中的currying有什麼價值?
- 25. 什麼是流行的「網絡就緒」函數式編程語言?
- 26. 分叉列表(函數式編程)的操作的正確術語是什麼?
- 27. 什麼是用於學習函數式編程的良好用例?
- 28. android:爲alertdialog項目編寫函數的過程是什麼?
- 29. actionscript函數中的線程是什麼?
- 30. 什麼是Spring的元數據編程?
Scala中不等價的。在scala中,你將不得不做一個zip,然後一張地圖 – drudru 2009-07-12 08:39:13
謝謝,現在我明白了! – 2009-07-12 08:39:54
那麼,它並不是真的「不等價」,它只是說Scala沒有`zipWith`。顯然,你可以按照`zipWith`來定義`zip`,或者``zip`和`map`來定義`zipWith`。 – 2009-07-12 08:41:37