Table of Contents
Chapter 3. 컬렉션(Collections) #
컬렉션이란? #
파이썬에서는 기본적인 데이터의 집합 타입이 있는데 이를 컬렉션이라고 한다.컬렉션에는 List, Tuple, Dictionary, Set 등 이 있다.
- x in coll -> x가 coll에 있을 때 True
- x not in coll -> x가 coll에 없을 때 True
- any(coll) -> 어떤 요소가 coll에 있으면 True
- all(coll) -> 모든 요소가 coll에 있으면 True
- len(coll) -> 요소의 길이
- max(coll[, key=function]) -> 요소의 최대 값
- min(coll[, key=function]) -> 요소의 최소 값
- sorted(coll[, keyfn][, reverseflag]) -> 각 요소를 비교하여 정렬
Sets #
집합, 즉 파이썬에서는 Set이라고 하는 데이터 타입이 있다. set은 순서와 상관없는 컬렉션이다. 또한 중복된 값을 넣을 수 없는데 집합이기 때문에 허용이 되지 않는다. 혹 중복 데이터가 있다면 이를 제거하고 유니크한 집합을 만들어 낸다. set 은 {}, tuple은 (), list는 [] 로 데이터를 지정한다. 만약 비어 있는 set을 만들고자 하면 {} 와 같이 사용하면 되지 않고 set() 함수를 이용하여 만들어야 한다. 혹은 리스트나 튜플을 집합으로 변경하고자 할때도 set()으로 만들면 된다.
자 먼저 다음과 같이 셋을 만든다. set()함수를 이용하면 되는데 이는 {} 와 같이 만든 것과 동일한 효과를 가진다. 먼저 set() 함수에 일련의 서열을 입력하고 집합을 만들면 중복된 요소는 제거되고 만들어진다. 결과를 보면 다음과 같다.
>>> set('TCAGTTAT')
{'A', 'C', 'T', 'G'}
>>> {'A', 'C', 'T', 'G'}
또는 다음과 같이 {}를 이용해서 만들 수 도 있다. 이후 집합은 정렬된 형태로 값을 저장하고 있다.
>>> DNABases = {'T', 'C', 'A', 'G'}
>>> DNABases
{'A', 'C', 'T', 'G'}
>>> RNABases = {'U', 'C', 'A', 'G'}
>>> RNABases
{'A', 'C', 'U', 'G'}
>>> {'TCAG'} {'TCAG'}
>>> {'TCAG', 'UCAG'} {'UCAG', 'TCAG'}
>>>
set은 집합 연산을 할 수 있다. 우리가 흔히 들어본 합집합, 교집합, 멱집합, 차집합 등의 연산을 수행할 수 있다.
비교 #
- set1 <= set2 -> subset, set1의 요소가 모두 set2에 있을 때 True
- set1 < set2 -> set1의 값이 모두 set2에 있으면 작은 집합
- set1 >= set2 -> upperset . set2의 값이 모두 set1에 있으면 True
- set1 > set2 -> set2의 값이 모두 set1에 있으면서 더 큰 집합
연산 #
- set1 | set2 -> 합집합(union)
- set1 & set2 -> 교집합(intersction)
- set1 - set2 -> 차집합, set1에만 있는 것 (difference)
-
set1 ^ set2 -> set1,2의 합집합에서 set1, 2의 교집합을 뺀 차집합 (symmetric_difference)
-
set1 |= set2 -> 업데이트, .update()
- set1 &= set2 -> 업데이트, .intersection_update()
- set1 -= set2 -> 업데이트, .difference_update()
- set1 ^= set2 -> 업데이트, .symmetric_difference_update()
- add() -> 추가
- remove() -> 제거, 만약 해당 요소가 없다면 에러
- discard() -> 제거, 해당 요소가 없어도 에러 발생 안함.
두 서열이 있을 때 비교 하는 set을 이용하여 코딩을 해보면 다음과 같이 해 볼 수 있다. DNAbases = set('TCAGtcag') RNAbases = set('UCAGucag')
def validate_base_sequence(base_sequence, RNAflag = False):
return set(base_sequence) <= (RNAbases if RNAflag else DNAbases)