압축(컴퓨터 과학)

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는 알파벳으로 하고 #는 σ에 없는 기호로 한다.

xx12...x x , yy12... y y , zz12 z ... z, ...는 δ의 요소의 n개의 단어(, 유한 시퀀스)이다. 가장 긴 단어의 길이, 즉 x, y, z, ...의 최대값을 나타냅니다.

이 단어들의 zip은 # {#} )의 요소의 n-tuples의 유한 시퀀스입니다.즉 ( { # \ ( ( ( ( \ \ \ { \ # \ # \ # \ )의요소입니다.

1, , )( , , ) ( ", y" , ) ( 1 , _ {1 , \ ) \ ldots ( x , {, \ \,

여기서 인덱스 i > w의 경우 wi # 입니다.

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]이 필요합니다. 마찬가지로 압축 해제에는 unzipunzip3 함수를 사용할 수 있습니다.

-- 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)
(맵 리스트1listn)
(맵 벡터 list1listn)
최단 리스트의 길이 뒤에 정지합니다.
일반적인 리스프 (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 list1listn 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 > 3unzipn 데이터 모듈에서 사용할 수 있습니다.리스트
파이썬 zip-zipvlist) zip-zipvlist) zip-zipvlist)

「 」를 참조해 주세요.

레퍼런스

  1. ^ ClojureDocs에서 맵
  2. ^ a b Python v2.7.2 문서의 내장 함수 섹션의 map(함수, 반복 가능 등)
  3. ^ zip : : : [ a ] -> [ b ] -> [ ( a , b ) ]프리드, 베이직 라이브러리에서
  4. ^ "Statements — Chapel Documentation 1.25".
  5. ^ "std.range - D Programming Language".
  6. ^ "Class: Array (Ruby 2.0.0)".
  7. ^ https://www.scala-lang.org/api/current/scala/collection/IterableOps.html#zip [B] (그것: scala.collection.ItableOnce [B]):CC[(A@scala.annotation.unchecked.Variance,B)]