8 분 소요

시퀀스 객체 응용

리스트 응용하기

  • append : 요소 하나를 추가
  • extend : 리스트를 연결하여 확장
  • insert : 특정 인덱스에 요소 추가
a = [10, 20, 30]
a.append(500)
a
[10, 20, 30, 500]
a = []
a.append(10)
a
[10]
a = [10, 20, 30]
b = [40, 50, 60]
a.extend(b)
a
[10, 20, 30, 40, 50, 60]
# 참고
# 시퀀스 객체 + 시퀀스 객체
# 리스트 + 리스트
# + 이 extend와 다른점은 새로운 결과가 나옴
# 반면에 extend는 a에 결과가 적용되어 있음
a = [10, 20, 30]
b = [40, 50, 60]
c = a + b
c
[10, 20, 30, 40, 50, 60]
a
[10, 20, 30]
b
[40, 50, 60]
a.insert(1, 10000)
a
[10, 10000, 20, 30]
  • a.insert(0, 요소) : 리스트의 맨 처음에 요소를 추가
  • a.insert(len(리스트), 요소) : 리스트의 맨 끝에 요소를 추가
a = [10, 20, 30]
a.insert(0, 1000)
a
[1000, 10, 20, 30]
a.insert(len(a), 2000)
a
[1000, 10, 20, 30, 2000]
len(a)
5
a.insert(5, 3000)
a
[1000, 10, 20, 30, 2000, 3000]
a.insert(-1, 4000) # -1 은 리스트의 마지막 인덱스
a
[1000, 10, 20, 30, 2000, 4000, 3000]
  • pop : 마지막 요소 또는 특정 인덱스의 요소를 삭제
  • remove : 특정 값을 찾아서 삭제
a = [10, 20, 30]
a.pop() # 인덱스를 넣지 않으면 마지막 요소 삭제
a
[10, 20]
a = [10, 20, 30]
a.pop(1) # 인덱스 넣으면 해당 인덱스의 요소가 삭제
a
[10, 30]
a = [10, 20, 30]
result = a.pop() # pop의 결과로 삭제된 요소를 반환
result
30
a = [10, 20, 30]
result = a.pop(1) # pop의 결과로 삭제된 요소를 반환
result
20
a = [10, 20, 30]
a.remove(20) # 값 자체를 넣어줌
a
[10, 30]
  • index(값) : 리스트에서 특정 값의 인덱스를 구함
  • count(값) : 리스트에서 특정 값의 개수를 구함
a = [10, 20, 30]
a.index(20)
1
a.index(40) # error
---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

<ipython-input-22-ff9934e1dbe7> in <module>
----> 1 a.index(40)


ValueError: 40 is not in list
a = [10, 10, 20, 30, 30, 30]
a.count(30)
3
  • reverse() : 리스트에서 요소의 순서를 반대로 뒤집음
  • sort() : 리스트의 요소를 정렬함(오름차순 기본값)
  • clear() : 리스트의 모든 요소를 삭제함
a = [10, 20, 30]
a.reverse()
a
[30, 20, 10]
a = [10, 50, -1, 0, 4, 1000]
a.sort()
a
[-1, 0, 4, 10, 50, 1000]
a = [10, 50, -1, 0, 4, 1000]
a.sort(reverse=True)
a
[1000, 50, 10, 4, 0, -1]
# sorted() : a에는 정렬결과가 반영 안됨
a = [10, 50, -1, 0, 4, 1000]
result = sorted(a)
result
[-1, 0, 4, 10, 50, 1000]
a
[10, 50, -1, 0, 4, 1000]
  • =
  • copy()
a = [0, 0, 0, 0]
b = a
a is b
True
b[1] = 1000
b
[0, 1000, 0, 0]
a # b만 변경을 했는데도 같은 메모리를 공유하므로 a에도 변화가 생겼음
[0, 1000, 0, 0]
a = [0, 0, 0, 0]
b = a.copy()
a is b
False
a
[0, 0, 0, 0]
b
[0, 0, 0, 0]
b[1] = 1000
b
[0, 1000, 0, 0]
a # b와 a가 서로 다른 메모리가 할당되서 b의 변화가 a에 영향을 주지 않았음
[0, 0, 0, 0]
a = [[1, 2, 3], [4, 5, 6]] # 2차원 리스트
a
[[1, 2, 3], [4, 5, 6]]
b = a
b[0] # 2차원 리스트를 색인하면 1차원 리스트가 결과로 나옴
[1, 2, 3]
b[1]
[4, 5, 6]
x = b[0]
x[2]
3
b[0][2]
3
b[0][2] = 1000
b
[[1, 2, 1000], [4, 5, 6]]
a
[[1, 2, 1000], [4, 5, 6]]
a = [[1, 2, 3], [4, 5, 6]] # 2차원 리스트

b = a.copy()
b[0][2] = 1000
b
[[1, 2, 1000], [4, 5, 6]]
a # copy로 b를 생성했는데도, b의 변화가 a에도 적용이 되었음 (2차원 리스트에서는 copy가 제대로 동작안함)
[[1, 2, 1000], [4, 5, 6]]
import copy
a = [[1, 2, 3], [4, 5, 6]] # 2차원 리스트

b = copy.deepcopy(a)
b[0][2] = 1000
b
[[1, 2, 1000], [4, 5, 6]]
a # deepcopy로 b를 생성하면 b의 변화가 a에 영향을 미치지 않았음
[[1, 2, 3], [4, 5, 6]]

반복문으로 리스트 요소 출력하기

  • for 요소 in 리스트:
a = [10, 20, 30]
for v in a:
    print(v)
10
20
30
  • for 인덱스, 요소 in enumerate(리스트):
a = [10, 20, 30]
for i, v in enumerate(a):
    print(i, v)
0 10
1 20
2 30
a = [10, 20, 30]
for i, v in enumerate(a, start=1):
    print(i, v)
1 10
2 20
3 30

리스트의 가장 작은수, 가장 큰수, 합계

a = [10, 20, 30]
min(a)
10
max(a)
30
sum(a)
60
sum(a)/len(a)
20.0

리스트 표현식(List Comprehension)

  • [식 for 변수 in 리스트]
result = []
for i in range(10): # 0~ 9 순회
    result.append(float(i))
result
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]
[float(i) for i in range(10)]
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]
word_list = ['python', 'is', 'easy']
# 반복문
result = []
for word in word_list:
    result.append(len(word))
result
[6, 2, 4]
# 리스트표현식
[len(word) for word in word_list]
[6, 2, 4]
  • [식 for 변수 in 리스트 if 조건식]
[i for i in range(10) if i % 2 == 0]
[0, 2, 4, 6, 8]
result = []
for i in range(10):
    if i % 2 == 0:
        result.append(i)
result        
[0, 2, 4, 6, 8]

리스트에서 특정 요소만 뽑아내기

  • 리스트 a에 들어있는 문자열 중에서 길이가 5인 것들만 리스트 형태로 출력되게 만드세요
a = ['alpha', 'bravo', 'charlie', 'delta', 'echo', 'foxtrot', 'golf', 'hotel', 'india']
b = [word for word in a if len(word) == 5]
print(b)
['alpha', 'bravo', 'delta', 'hotel', 'india']
b = []
for word in a:
    if len(word) == 5:
        b.append(word)
print(b)        
['alpha', 'bravo', 'delta', 'hotel', 'india']

리스트에서 map 사용하기

a = [1.2, 2.5, 3.7, 4.6]
b = []
for i in a:
    b.append(int(i))
b    
[1, 2, 3, 4]
b = list(map(int, a))
b
[1, 2, 3, 4]

튜플 응용하기

  • index(값) : 특정값의 인덱스 구하기
a = (10, 20, 30)
a.index(30)
2
  • count(값) : 특정값의 개수 구하기
a = (10, 10, 10, 20, 20, 30, 30, 30, 30)
a.count(30)
4

문자열 응용하기

  • replace(‘바꿀문자열’, ‘새문자열’) : 문자열 바꾸기
s = 'Hello World!'
result = s.replace('World', 'Python')
result
'Hello Python!'
s
'Hello World!'
  • split(‘기준문자열’) : 문자열 분리하기
s = 'apple pear grape pineapple orange'
result = s.split()
result
['apple', 'pear', 'grape', 'pineapple', 'orange']
s
'apple pear grape pineapple orange'
s = 'apple.pear.grape.pineapple.orange'
result = s.split('.')
result
['apple', 'pear', 'grape', 'pineapple', 'orange']
  • ‘구분자’.join(리스트)
'.'.join(result)
'apple.pear.grape.pineapple.orange'
  • upper() : 대문자로 바꿈
  • lower() : 소문자로 바꿈
  • title() : 첫글자만 대문자로 바꿈
  • strip() : 문자열 양쪽에 있는 연속된 모든 공백을 삭제
  • lstrip() : 문자열 왼쪽에 있는 연속된 모든 공백을 삭제
  • rstrip() : 문자열 오른쪽에 있는 연속된 모든 공백을 삭제
  • center(길이) : 문자열을 길이만큼 사이즈를 확보하고 중간에 배치
s = 'python'
s.upper()
'PYTHON'
s
'python'
S = 'PYTHON'
S.lower()
'python'
S.title()
'Python'
'    Python     '.strip()
'Python'
'    Python     '.lstrip()
'Python     '
'    Python     '.rstrip()
'    Python'
'  ,,.  Python ,...    '.strip(',. ')
'Python'
'python'.center(20)
'       python       '
  • index(‘찾을문자열’) : 문자열에서 특정문자열을 찾아서 인덱스를 반환하고, 없으면 에러
  • find(‘찾을문자열’) : 문자열에서 특정문자열을 찾아서 인덱스를 반환하고, 없으면 -1 반환
s = 'apple pear grape pineapple orange'
s.index('pl') # 같은 문자열이 여러개면 먼저나온 문자열의 인덱스 반환
2
s.rindex('pl') # 오른쪽부터 찾음
23
s = 'apple pear grape pineapple orange'
s.index('pppp') # error
---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

<ipython-input-95-35c74c9e7c37> in <module>
      1 s = 'apple pear grape pineapple orange'
----> 2 s.index('pppp')


ValueError: substring not found
s = 'apple pear grape pineapple orange'
s.find('pppp')
-1
s = 'apple pear grape pineapple orange'
s.find('pl')
2
s = 'apple pear grape pineapple orange'
s.rfind('pl')
23
  • count(‘문자열’) : 현재 문자열에서 특정 문자열이 몇 번 나오는지 알아냄
s = 'apple pear grape pineapple orange'
s.count('pl')
2

서식지정자

  • %
name = '장경희'

'나는 %s입니다'%name
'나는 장경희입니다'
age = 20
'나이는 %d입니다'%age
'나이는 20입니다'
score = 4.5
'내 학점은 %.1f입니다'%score
'내 학점은 4.5입니다'
  • format()
name = '장경희'

'나는 {}입니다'.format(name)
'나는 장경희입니다'
age = 20
'나이는 {}입니다'.format(age)
'나이는 20입니다'
score = 4.5
'내 학점은 {}입니다'.format(score)
'내 학점은 4.5입니다'
name = '장경희'
age = 20
score = 4.5

'나는 {0}입니다. 나이는 {1}입니다. 내 학점은 {2}입니다.'.format(name, age, score)
'나는 장경희입니다. 나이는 20입니다. 내 학점은 4.5입니다.'
  • f’문자열’
name = '장경희'
age = 20
score = 4.5
f'나는 {name}입니다. 나이는 {age}입니다. 내 학점은 {score}입니다.'
'나는 장경희입니다. 나이는 20입니다. 내 학점은 4.5입니다.'

딕셔너리 응용하기

  • setdefault : 키-값 쌍 추가
  • update : 키의 값 수정, 키가 없으면 키-값 쌍 추가
x = {'a':10, 'b':20, 'c':30, 'd':40}
type(x)
dict
x.setdefault('e')
x
{'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': None}
x.setdefault('f', 50)
x
{'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': None, 'f': 50}
x.update({'a':100, 'b':200, 'g':1000})
x
{'a': 100, 'b': 200, 'c': 30, 'd': 40, 'e': None, 'f': 50, 'g': 1000}
  • pop(키) : 특정 키-값 쌍을 삭제한 뒤 삭제한 값을 반환
  • pop(키, 기본값) : 키가 없을 때 기본값을 반환
  • clear() : 딕셔너리의 모든 키-값 쌍을 삭제
x
{'a': 100, 'b': 200, 'c': 30, 'd': 40, 'e': None, 'f': 50, 'g': 1000}
result = x.pop('a')
result
100
x
{'b': 200, 'c': 30, 'd': 40, 'e': None, 'f': 50, 'g': 1000}
result = x.pop('a', 0)
result
0
  • get(키) : 특정 키의 값을 가져옴
  • get(키, 기본값) : 키가 없을 때 기본값을 반환
x.get('alpha')
x.get('alphaaa', 0)
0
x
{'b': 200, 'c': 30, 'd': 40, 'e': None, 'f': 50, 'g': 1000}
  • items() : 키-값 쌍의 모두 가져옴
  • keys() : 키를 모두 가져옴
  • values() : 값을 모두 가져옴
x
{'b': 200, 'c': 30, 'd': 40, 'e': None, 'f': 50, 'g': 1000}
x.items()
dict_items([('b', 200), ('c', 30), ('d', 40), ('e', None), ('f', 50), ('g', 1000)])
x.keys()
dict_keys(['b', 'c', 'd', 'e', 'f', 'g'])
x.values()
dict_values([200, 30, 40, None, 50, 1000])
for k, v in x.items():
    print(k, v)
b 200
c 30
d 40
e None
f 50
g 1000
for k in x.keys():
    print(k)
b
c
d
e
f
g
for v in x.values():
    print(v)
200
30
40
None
50
1000
  • [식 for 변수 in 시퀀스객체 if 조건식] <– 리스트 표현식
  • {키:값 for 키, 값 in 딕셔너리.items() if 조건식} <– 딕셔너리 표현식
x = {'alpha': 10, 'bravo': 20, 'charlie': 30, 'delta': 40}
{k:v for k, v in x.items() if k!='delta' and v != 30}
{'alpha': 10, 'bravo': 20}

세트

  • 세트 = {값1, 값2, 값3, …}
fruits = {'strawberry', 'grape', 'orange', 'pineapple', 'cherry'}
type(fruits)
set
# 빈 리스트 만들기
l = []
l = list()

# 빈 튜플 만들기
t = ()
t = tuple()

# 빈 딕셔너리 만들기
d = {}
d = dict()

# 빈 세트 만들기
s = set()

# 세트는 중복이 없고(unique한 원소), 순서가 없음
fruits = {'strawberry', 'grape', 'orange', 'pineapple', 'cherry', 'cherry', 'cherry'}
fruits
{'cherry', 'grape', 'orange', 'pineapple', 'strawberry'}
a = {'a', 'a', 'b'}
b = {'a', 'b', 'a'}
c = {'b', 'a'}
a == b
True
b == c
True

Reference

파이썬 코딩 도장

댓글남기기