tech.junha.kr

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

iterable 객체: collections.Iterable의 인스턴스로, 반복가능한 객체를 말한다.

  1. 문자열

  2. 리스트

  3. 딕셔너리

  4. 튜플

  5. 집합

  6. range, enumerate, zip

1. 시퀀스 자료형 (iterable)의 공통 특징

  1. 인덱싱: seq[index]에 해당하는 값 반환 (집합 사용 불가)
  2. 슬라이싱: seq[index1 : index2] seq 원래 타입을 그대로 반환한다. (집합, 딕셔너리 사용 불가)
nums = [1,2,3,4,5,6,7,8,9]
nums[-3:]
# [7, 8, 9]
  1. count 메서드: seq.count(d): 시퀀스 자료의 자료d의 개수를 반환한다.

  2. for 반복문: for item in seq

  3. 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