[Python] iterable 객체 정리 (문자열, 리스트, 딕셔너리, 튜플, 집합)

iterable 객체: collections.Iterable의 인스턴스로, 반복가능한 객체를 말한다.
-
문자열
-
리스트
-
딕셔너리
-
튜플
-
집합
-
range, enumerate, zip
1. 시퀀스 자료형 (iterable)의 공통 특징
- 인덱싱: seq[index]에 해당하는 값 반환 (집합 사용 불가)
- 슬라이싱: seq[index1 : index2] seq 원래 타입을 그대로 반환한다. (집합, 딕셔너리 사용 불가)
nums = [1,2,3,4,5,6,7,8,9]
nums[-3:]
# [7, 8, 9]
-
count 메서드: seq.count(d): 시퀀스 자료의 자료d의 개수를 반환한다.
-
for 반복문: for item in seq
-
in 연산자: 멤버 확인, item in seq
2. 문자열
- string method는 실제 값을 변경하지 않고, 변경된 값을 반환한다.
1) str.split(c): 리스트 반환
- 문자열을 c를 기준으로 리스트를 반환한다.
- 괄호를 비울 시 공백이" " 기본값으로 들어간다.
"안녕하세요".split()
# ["안녕하세요"]
"안 녕 하 세요".split()
# ['안', '녕', '하', '세요']
"안 녕 하 세요".split(" ")
# ['안', '녕', '하', '세요']
"hello".split("l")
# ['he','','o']
2) str.join(list): 문자열 반환
리스트를 위한 문자열 메서드이다.
문자열로 이루어진 리스트의 요소들을 구분자를 통해 합쳐 하나의 문자열로 반환
li = ['안', '녕', '하', '세', '요']
''.join(li)
# 안녕하세요
" ".join(['안', '녕', '하', '세', '요'])
# 안 녕 하 세 요
a = ["1", "2", "3"]
"안녕하세요".join(a)
# 1안녕하세요2안녕하세요3
3) str.startswith('a'): 불리언 반환
"supernman".startswith('s')
# True
4) str.lower(), str.upper(): 문자열 반환
"heLLo".upper()
# HELLO
"heLLo".lower()
# hello
5) str.replace("): 문자열 반환
"'go home!!! you,you,you!'".replace(",", "").replace("'", "").replace("!", "")
# go home youyouyou
6) str.replace("): 문자열 반환
앞 뒤로 공백문자, 줄바꿈 문자를 지워 반환한다.
" 안녕요\n".strip()
# 안녕요
3. 리스트
[50] +[50]
# [50,50]
nums = [1,2,3]
nums.insert(1,9)
# [1, 9, 2, 3]
# 특정 인데스에 한 개의 자료를 넣을 수 있다.
nums = [1,2,3,1,1]
nums.remove(1)
# [2, 3, 1, 1]
# 특정 엘리멘트를 삭제, 중복시 가장 앞의 인덱스의 엘리멘트 하나 삭제
nums = ['a', 'b', 'c']
nums.pop(2)
# 'c'
# i번째의 원소를 제거 후 그 원소를 반환, 괄호 비울 시 마지막 원소
list.sort() : 원본 변형
nums = [7,1,2]
nums.sort()
# [1,2,7]
# 원본 변형, 오름차순, 사전순
sorted(list, key=함수): 리스트 반환
함수에 반환된 값의 오름차순으로 정렬된다.
nums = [5, -1, -4, 3, 100, 6]
sorted(nums, key=abs)
# [-1, 3, -4, 5, 6, 100]
4. 딕셔너리
딕셔너리는 해싱 알고리즘을 통해 자료 탐색이 상당히 빠르다.
dictionary['key']: key를 알면 value를 알 수 있다.
1) dictionary.items()을 통해 key와 value 모두 접근
dic = {'a': 123, 'b': 456, 'c': 789 }
for x in dic:
print(x)
# a
# b
# c
for x in dic.items():
print(x)
# ('a', 123)
# ('b', 456)
# ('c', 789)
for key, value in dic.items():
print(key, value)
# a 123
# b 456
# c 789
2) dictionary의 key가 될 수 있는 것
- key 값에 튜플을 사용할 수 있지만, 리스트는 안된다.
dic[cvs[1]] = value
-
리스트의 인덱싱을 통해 문자열등을 key 값으로 줄 수 있다.
-
이후에 리스트의 요소가 바뀌어도 처음에 들어간 값으로 고정된다.
3) dictionary.keys() dictionary.values()
dic = {'a':'1','b':'2','c':'3'}
dic.keys()
# dict_keys(['a', 'b', 'c'])
dic.values()
# dict_keys(['1', '2', '3'])
반환 값이 <class 'dict_keys'>이므로 list로 바인딩 해줘서 사용해야한다.
4) del
del함수로 딕셔너리의 원소를 삭제할 수 있다.
del person['age']
5. 튜플
del person['age']
hello =('안녕', 'hello', 'bonjour')
bye = ('잘가', 'bye', 'mola')
hello[1]
# hello
hello + bye
# ('안녕', 'hello', 'bonjour', '잘가', 'bye', 'mola')
hello * 2
# ('안녕', 'hello', 'bonjour', '안녕', 'hello', 'bonjour')
6. 집합
중복과 순서가 없다.
nums = set([1,3,5,7])
nums = {1, 3, 5, 7}
# 원본 변형 메서더들
nums.add(9)
nums.update([3, 15, 4])
nums.remove(7) # 해당 값이 없으면 에러 띄어줌
nums.discard(13)
union = set1 | set2
intersection = set1 & set2
diff = set1 - set2
xor = set1 ^ set2
my_set = {num for num in my_set if num % 2 != 0}
xor: A-B U B-A
7. range, enumeratem zip
1) range(include, exclude, step)
range는 list로 변환해서 사용한다.
range(10, 20, 2)
# range(10, 20, 2)
list(range(10, 20, 2))
# [10, 12, 14, 16, 18]
2) enumerate(iterable)
반복문 사용 시 몇 번째 반복문인지 확인할 때 사용
인덱스, 원소를 tuple로 반환
t = [1, 5, 7]
for p in enumerate(t):
print(p)
# (0, 1)
# (1, 5)
# (2, 7)
3) zip(iterable1, iterable2)
각 iterable객체가 담고 있는 원소를 tuple의 형태로 반환하는 zip객체 (iterator) 반환
numbers = [1,2,3]
letters = ['a', 'b', 'c']
for x,y in zip(numbers,letters):
print(x,y)
# 1 a
# 2 b
# 3 c