압축(컴퓨터 과학)
Zipping (computer science)컴퓨터 과학에서, 지핑은 일련의 튜플을 일련의 튜플에 매핑하는 함수이다.이 이름 zip은 이전에 분리된 두 시퀀스를 서로 연결한다는 점에서 지퍼의 작용에서 유래했습니다.역함수는 unzip 입니다.
예
고양이가 3인 곳에 cat, fish, be라는 세 단어를 놓고 볼 때, fish는 4이고 be는 2입니다.{ } 、 ; { } cat, fish, be의 zip은 4개의 요소입니다.
여기서 #는 원래 알파벳이 아닌 기호입니다.Haskell에서는 이것을 최단 으로 잘라냅니다 여기서 2 { } 2 { :
zip3 "고양이" '물고기' "be" - [('c' 'f' 'b' 'a' 'i' 'e')] 정의.
be는 알파벳으로 하고 #는 σ에 없는 기호로 한다.
xx가12...x x , yy12... y y , zz12 z ... z, ...는 δ의 요소의 n개의 단어(즉, 유한 시퀀스)이다.은 가장 긴 단어의 길이, 즉 x, y, z, ...의 최대값을 나타냅니다.
이 단어들의 zip은 (δ # {#} )의 요소의 n-tuples의 유한 시퀀스입니다.즉 ( { # \ ( ( ( ( \ \ \ { \ # \ # \ # \ )의요소입니다.
- 1, , )( , , ) ( ", y" , ) ( 1 , _ {1 , \ ) \ ldots ( x , {, \ \,
여기서 인덱스 i > w의 경우 w는i # 입니다.
x, y, z, ...의 zip은 zip(x, y, z, ...) 또는 x y y z z ... ...로 표시됩니다.
zip의 역수는 unzip으로 표시될 수 있습니다.
zip 동작의 종류는 다음과 같이 정의됩니다.
_ { displaystyle \ \ 는 입력 워드의 최소 길이입니다.인접한 요소의 사용은 피하지만§(\ell를 초과하는 입력 의 요소에 대한 정보는 파기됩니다.
프로그래밍 언어
zip 기능은 프로그래밍 언어에서 종종 사용할 수명은 다음과 같습니다.zip. Lisp-dialects에서는 원하는 함수를 원하는 목록에 매핑할 수 있습니다.map은 Lisp에서는 variadic하므로 임의의 수의 목록을 인수로 사용할 수 있습니다.Clojure의 [1]예:
;; 'nums'에는 무한대의 숫자 리스트(0 1 2 3 ...)가 포함되어 있습니다. (방어하다숫자 (범위)) (방어하다10개 [10 20 30]) (방어하다이름 앨리스) ;; (0 1 2 3 ...) 및 [10 20 30]을 벡터로 압축하려면 , 리스트와 같은 「맵 벡터」를 호출합니다. (지도 벡터숫자 10개) ; ⇒ ([0 10] [1 20] [2 30]) (지도 목록숫자 10개) ; ⇒ ((0 10) (1 20) (2 30)) (지도 스트링숫자 10개) ; ⇒ ("010" "120" "230") ;;; "map"은 최단 시퀀스로 잘라냅니다. "Alice"에서 \c 및 \e가 누락되었습니다. (지도 벡터숫자 10개 이름) ; ( ( [ 0 10 \ A ][ 1 20 \ l ][ 2 30 \ i ] ) (지도 스트링숫자 10개 이름) ; § ("010A" "120l" "230i") ;; 압축을 풀려면 "map vector" 또는 "map list"를 적용합니다. (맵 리스트 적용(지도 벡터숫자 10개 이름)) ;; ( ( ( 0 1 2 ) ( 10 20 30 ) ( \ A \ l \ i ) 공통 리스프:
(디파라미터 숫자 '(1 2 3)) (디파라미터 10개 '(10 20 30)) (디파라미터 이름 앨리스) (맵카 #'목록. 숫자 10개) ;; ⇒ ((1 10) (2 20) (3 30)) (맵카 #'목록. 숫자 10개 (강요하다 이름 리스트)) ;; " ( 1 10 # \ A ) ( 2 20 # \ l ) ( 3 30 # \ i ) : 최단 리스트로 잘라냅니다. ;; 압축 해제 (적용합니다. #'맵카 #'목록. (맵카 #'목록. 숫자 10개 (강요하다 이름 리스트))) ;; ( ( ( 1 2 3 ) ( 10 20 30 ) ( # \ A # \ l # \ i ) Python 등의 언어에서는 zip() 함수가 제공되며 이전 버전(Python 2.*)에서는 None을 목록 위에 매핑하여 [2]동일한 효과를 얻을 수 있습니다.zip()과 * 연산자를 조합하여 목록을 [2]압축 해제합니다.
>>>숫자 = [1, 2, 3] >>>10개 = [10, 20, 30] >>>이름 = 앨리스 >>>압축했다 = 지퍼(숫자, 10개) >>>압축했다 [(1, 10), (2, 20), (3, 30)] >>>지퍼(*압축했다) # 압축 해제 [(1, 2, 3), (10, 20, 30)] >>>압축했다 = 지퍼(숫자, 10개, 목록.(이름)) >>>압축했다 # zip, 최단에서는 잘라냅니다. [(1, 10, 'A', (2, 20, l), (3, 30, i)] >>>지퍼(*압축했다) # 압축 해제 [(1, 2, 3), (10, 20, 30), ('A', 'l', 'i')] >>>없음'을 사용한 # 매핑은 잘리지 않습니다. Python 3에서는 더 이상 사용되지 않습니다. >>>지도(없음., 숫자, 10개, 목록.(이름)) [(1, 10, 'A'), (2, 20, 'l'), (3, 30, 'i'), (없음, 없음, 'c'), (없음, 없음, 'e')] Haskell에는 시퀀스를 압축하는 방법이 있지만 각 Ariity에 대해 특정 기능(2개의 시퀀스에 대해 zip3, 3개의 zip3 등)[3]이 필요합니다. 마찬가지로 압축 해제에는 unzip 및 unzip3 함수를 사용할 수 있습니다.
-- nums에는 [1, 2, 3, ...]의 무한 리스트가 포함되어 있습니다. 숫자 = [1..] 10개 = [10, 20, 30] 이름 = 앨리스 지퍼 숫자 10개 -- [ [ ( 1 , 10 ) 、 ( 2 , 20 ) 、 ( 3 , 30 ) - zip, 무한 리스트 잘라내기 지퍼를 열다 $ 지퍼 숫자 10개 -- ( ( [ 1, 2, 3 ] , [ 10, 20 , 30 ]) - 압축 해제 zip3 숫자 10개 이름 -- [ [ ( 1,10 , A ) 、 ( 2,20 , l ) 、 ( 3,30 , i ) ]- zip , truncates 압축 해제 3 $ zip3 숫자 10개 이름 -- ( ( [ 1, 2, 3 ] , [ 10, 20 , 30 ] , "Ali" ) - 압축 해제 언어 비교
zip 지원별 언어 목록:
| 언어 | 지퍼 | Zip 3 목록 | Zipn 리스트 | 메모들 |
|---|---|---|---|---|
| 예배당 | zip (1회 반복2) | zip (1회 반복 2회 반복 3) | zip (iter1 ...)이너) | 각 반복기의 모양, 각 치수의 순위 및 범위가 [4]동일해야 합니다. |
| 클로쥬르 | (맵 리스트 list1 list2) (맵 벡터 list1 list2) | (맵 리스트1 list2 list3) (맵 벡터 list1 list2 list3) | (맵 리스트1 … listn) (맵 벡터 list1 … listn) | 최단 리스트의 길이 뒤에 정지합니다. |
| 일반적인 리스프 | (mapcar #'list list1 list2) | (mapcar #'list list1 list2 list3) | (mapcar #'list list1 ... listn) | 최단 리스트의 길이 뒤에 정지합니다. |
| D | zip(range1, range2) range1.zip(range2) | zip(range1, range2, range3) range1.zip(range2, range3) | zip(range1, …, rangeN) range1.zip(…, rangeN) | 중지 정책은 기본적으로 shortest로 설정되어 있으며 옵션으로 [5]shortest, longest 또는 동일한 길이를 요구할 수 있습니다.두 번째 양식은 UFCS의 예시입니다. |
| F# | List.zip list1 list2 Seq.zip source1 source2 Array.zip array1 array2 | List.zip3 list1 list2 list3 Seq.zip3 source1 source2 source3 Array.zip3 array1 array2 array3 | ||
| 하스켈 | zip list1 list2 | zip3 list1 list2 list3 | zipn list1 … listn | zipn for n > 3 은 데이터 모듈에서 사용할 수 있습니다.목록. 가장 짧은 목록이 끝나면 멈춥니다. |
| 파이썬 | zip(list1, list2) | zip(list1, list2, list3) | zip(list1, …, listn) | zip() 및 map()(3.x)는 최단 리스트 종료 후에 정지하고 map()(2.x) 및 itertools.zip_longest()(3.x)는 [None]항목에서 최단 리스트를 확장합니다. |
| 루비 | list1.zip(list2) | list1.zip(list2, list3) | list1.zip(list1, .., listn) | 실행 중인 목록(list1)이 압축된 목록보다 짧을 경우 list1의 길이가 됩니다.list1이 0보다 긴 경우 결측값을[6] 채우기 위해 사용됩니다. |
| 스칼라 | list1.zip(list2) | 두 컬렉션 중 하나가 다른 컬렉션보다 길면 나머지 요소는 무시됩니다.[7] |
| 언어 | 압축 해제 | 3개의 튜플을 압축 해제합니다. | n개의 튜플을 압축 해제합니다. | 메모들 |
|---|---|---|---|---|
| 클로쥬르 | (매도 벡터 Ziplist) | (매도 벡터 Ziplist) | (매도 벡터 Ziplist) | |
| 일반적인 리스프 | (apply #'mapcar #'list ziplist) | (apply #'mapcar #'list ziplist) | (apply #'mapcar #'list ziplist) | |
| F# | List.unzip list1 list2 Seq.unzip source1 source2 Array.unzip array1 array2 | List.unzip3 list1 list2 list3 Seq.unzip3 source1 source2 source3 Array.unzip3 array1 array2 array3 | ||
| 하스켈 | 압축 해제 | zip3 압축 해제 | 압축 해제 | n > 3의 unzipn은 데이터 모듈에서 사용할 수 있습니다.리스트 |
| 파이썬 | zip-zipvlist) | zip-zipvlist) | zip-zipvlist) |
「 」를 참조해 주세요.
레퍼런스
- ^ ClojureDocs에서 맵
- ^ a b Python v2.7.2 문서의 내장 함수 섹션의 map(함수, 반복 가능 등)
- ^ zip : : : [ a ] -> [ b ] -> [ ( a , b ) ]프리드, 베이직 라이브러리에서
- ^ "Statements — Chapel Documentation 1.25".
- ^ "std.range - D Programming Language".
- ^ "Class: Array (Ruby 2.0.0)".
- ^ https://www.scala-lang.org/api/current/scala/collection/IterableOps.html#zip [B] (그것: scala.collection.ItableOnce [B]):CC[(A@scala.annotation.unchecked.Variance,B)]
