2. 리스트, 튜플, 딕셔너리, 셋

2016. 10. 13. 13:09Programming Languages/PYTHON

1)리스트

[]로 생성하며 문자열과 다르게 변경이 가능하다. 동일한 값이 여러번 들어가는 것도 가능하다.


weekdays=['Mondays','Tuesday','Wednesday','Thursday','Friday']


list('cat')

--> ['c','a','t'] 으로 형변환이 가능하다.



weekdays[1]

--> 'Tuesday' 처럼 오프셋으로 하나의 특정 값을 추출하는 것도 가능하다. 문자열과 마찬가지로 음수의 인덱스로 거꾸로 값을 추출하는 것도 가능.


weekdays[1]='화요일'

--> 특정 오프셋의 원소를 바꿀 수 있다. 


weekdays[2:5:2]

문자열과 마찬가지로 슬라이스로 항목을 추출하는 것이 가능하다.



리스트의 멤버함수는 다음과 같다.

 

 기능

예시 

 append()

리스트의 끝에 새 항목을 추가한다.

 

 extend(추가할 리스트)

다른 리스트와 병합할 수 있다. 

 

 insert(오프셋, 항목)

지정 오프셋에 새 항목을 추가한다. 

 

 remove(항목)

해당 항목을 검색해서 삭제한다. 

 

 pop()

리스트의 테일을 반환함과 동시에 삭제한다. 

 

 pop(오프셋)

오프셋의 항목을 반환함과 동시에 삭제한다. 

 

index(항목) 

항목 값의 오프셋을 반환한다. 

 

count(항목)

특정 항목이 몇개 있는지 센다. 

 

 sort()

리스트의 항목을 정렬한다. 

 



del weekdays[2]

--> 원하는 오프셋의 항목을 삭제한다.


'Wednesday' in weekdays

-->True


', '.join(weekdays)

--> weekdays의 각 항목 사이에 ', '를 넣어 문자열을 생성한다.


sorted(weekdays)

--> 정렬된 weekdays를 반환한다. weekdays 자체는 정렬되지 않는다.


len(weekdays)

--> 리스트의 항목의 개수를 반환한다.



**할당과 복사의 차이

a=[1,2,3]

b=a

--> b는 단지 같은 리스트 객체의 a를 참조한다. 별명을 정해준다고 생각하면 된다. 따라서 a의 내용을 수정하면 b에도 적용된다.


b=a.copy()

b=list(a)

b=a[:]

--> 위의 세 가지 코드는 모두 원본 리스트 a를 복사해서 b에 넣은 것으로 b는 원 객체와 상관 없는 복사본이다. 따라서 b를 수정하더라고 a에는 반영되지 않는다.



2) 튜플

()로 생성하며 리스트와 다르게 수정이 불가능 하다. 


weekdays = 'Mon', 'Tue', "Wed', 'Thu', 'Fri'

weekdays = ('Mon', 'Tue', "Wed', 'Thu', 'Fri')

--> 요소 간에 콤마를 넣기만 해도 튜플로 인식한다. ()로 의미를 분명히 하는 것이 좋다.

**튜플 언패킹
a,b,c,d,e=weekdays
--> a,b,c,d,e 에 순서대로 해당 튜플의 원소를 대입할 수 있다. 

한 문장에서 임시 변수를 사용하지 않고 두 값을 서로 바꾸는 것도 가능하다!! a,b=b,a 라고 하면 a와 b의 값이 바뀌는 것이다.
tuple(리스트)로 리스트에서 튜플로의 형변환도 가능하다.



3) 딕셔너리
{}으로 생성하며 각각의 원소는 키:값의 형태를 가진다. dict()로 생성할 수 있으며 두 항목 튜플로 된 리스트나 두 항목 리스트로 된 튜플, 두 문자 문자열로 된 리스트, 두 문자 문자열로 된 튜플도 dict를 사용해 딕셔너리로 만들 수 있다.

animals={"cat":"lucy","dog":"tom","hamster":"karl"}

animals["cat"]
-->"lucy"

animals["cat"]="peter"
--> 키 "cat"의 값을 "peter"로 변경할 수 있다.

animals["turtle"]="terry"
--> 키를 "turtle"로 하는 값은 없으므로 새로 추가한다. 딕셔너리의 키들은 반드시 유일해야한다. 

 

 기능

 

 update(다른 딕셔너리)

 두개의 딕셔너리를 결합한다. 키가 겹치는 경우 두번째 딕셔너리의 값이 승리한다.

 

 clear()

모든 내용을 삭제한다. 

 

 get(키값)

만약 키가 존재하면 그 값을 얻는다. 

키가 존재하지 않으면 None을 얻는다.

 

 get(키값, 옵션값)

키가 존재하지 않으면 옵션값을 출력할 수 있다. 

 

 keys()

모든 키값을 dict_key 타입으로 반환한다 

 

 values()

딕셔너리의 모든 값을 반환한다. 

 

 items()

튜플형태로 키와 값을 짝지어서 반환한다. 

 

 copy()

복사본을 생성한다 

 




 포함하고 있는 함수 외에도 다음 방법을 이용해 dict를 다룰 수 있다.

del animals["cat"]
--> 키로 항목을 찾아내서 삭제한다.

"dog" in animals
--> True 


4) 셋
{}로 생성하며 딕셔너리와 다르게 키 값이 없다. set()함수로도 만들 수 있다. 문자열을 set안에 넣으면 각각 문자 하나씩으로 분리되어 set이 만들어지며 튜플과 리스트는 타입만 셋으로(이 때 겹치는 경우 한 번만 포함한다.) 딕셔너리에 set()을 사용하면 키만 가져온다.

in으로 멤버십을 테스트 할 수 있고 &으로 교집합 연산을, |으로 합집합 연산을 할 수 있다. -연산자로는 차집합을 구할 수 있고 ^연산자로 대칭차집합(한쪽 셋에는 들어있지만 양쪽 모두에는 들어있지 않은 멤버)를 구할 수 있다. <=연산자는 추측가능하게 집합 간의 포함관계를 구할 수 있는 연산자이고, >=도 방향만 다르지 같은 기능을 한다. 등호를 빼고 >나 <만 사용한다면 자기 자신과의 포함관계를 고려하지 않으므로 수학시간에 배우는 진부분집합과 같은 의미라고 보면 되겠다.

집합 간 연산을 정리하면 다음과 같다.

 기호

 기능

 a&b , a.intersection(b)

 교집합

 a|b , a.union(b)

 합집합 

 a-b, a.difference(b)

 차집합 

 a^b, a.symmetric_difference(b)

 대칭 차집합 

 a<=b, a.issubset(b)

 포함관계 

 a<b

 포함관계 

 a>=b, a.issuperset(b)

 포함관계 

 a>b

 포함관계