일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- N0NamedWargame #AjouUniv #mandu-mandu #forensics
- python
- Whois #정보보안교육 #Ajou
- Memory Virtualization
- N0Named
- N0NamedWargame #mandu-mandu #forensics #길에서주어온만두
- 운영체제
- AjouUniv #Whois #정보보안교육
- 스케줄링
- ftz
- 코딩도장
- Whois #정보보안교육 #webhacking.kr
- N0NamedWargame #mandu-mandu #forensics #left_side_B
- Whois #정보보안교육 #AjouUniv #Pwnable
- webhacking
- AjouUniv #SuniNatas #Web
- AjouUniv #Whois #Reversing
- Dreamhack
- 사이버보안학과
- Allocation Starategy
- systemhacking
- HackCTF
- Whois #AjouUniv #정보보안교육 #Pwnable
- Pwnable
- AjouUniv #Whois #정보보안교육 #Pwnable
- 아주대학교
- hackerschool
- Variable Partition
- SuNiNaTaS #mandu-mandu #AjouUniv #forensics
- 아주대학교 #Whois #정보보안교육 #4주차
- Today
- Total
chipkkang9's story
[CodingDojang] 리스트와 튜플 응용하기 본문
리스트 조작하기
리스트에 요소 추가하기
- append: 요소 하나 추가
- extend: 리스트를 연결하여 확장
- insert: 특정 인덱스에 요소 추가
append(요소)는 리스트 끝에 요소 하나를 추가하는 함수이다. 아래와 같은 방법으로 사용한다.
>>> a = [10, 20, 30]
>>> a.append(500)
>>> a
[10, 20, 30, 500]
>>> len(a)
4
append() 함수는 빈 리스트에 값 추가도 할 수 있다.
또한, 리스트 안에 다른 리스트의 추가도 가능하며, 추가된 리스트는 안에 몇 개의 요소가 있든, 하나의 큰 요소로 취급된다.
그러면 리스트 끝에 새로운 리스트를 붙이고 싶다면 어떡할까?
extend(리스트) 함수를 이용하면 기존의 리스트 뒤에 새로운 리스트를 이어붙일 수 있다.
>>> a = [10, 20, 30]
>>> a.extend([500, 600])
>>> a
[10, 20, 30, 500, 600]
>>> len(a)
5
또한, 리스트에 원하는 값을 원하는 위치에 삽입할 수 있다.
insert() 함수를 사용하면 되는데, insert(인덱스, 요소)의 형식으로 사용한다.
>>> a = [10, 20, 30]
>>> a.insert(2, 500)
>>> a
[10, 20, 500, 30]
>>> len(a)
4
리스트에서 요소를 삭제할 수도 있다. 아래의 두 가지 방법을 사용할 수 있다.
- pop() or del(): 마지막 요소 또는 특정 인덱스의 요소를 삭제
>>> a = [10, 20, 30]
>>> a.pop(1)
20
>>> a
[10, 30]
>>> b = [10, 20, 30]
>>> del a[1]
>>> a
[10, 30]
- remove(): 특정 값을 찾아서 삭제(만약 리스트에 같은 값이 여러 개 있을 경우 처음 찾은 값을 삭제한다.)
>>> a = [10, 20, 30, 20]
>>> a.remove(20)
>>> a
[10, 30, 20]
지금까지 알아본 리스트의 메서드로 스택과 큐를 만들 수 있다. append와 pop을 사용하면 사실 스택과 100% 일치하는데, 큐는 어떻게 만들까?
여기서 pop()이 아니라, pop(0)과 같은 방법을 사용하면 간단하게 큐를 구현할 수 있다.
파이썬은 큐를 효율적으로 사용할 수 있도록 덱(deque, double ended queue)이라는 자료형을 제공한다. 사용하는 방법은 아래의 코드로 적어놓겠다.
>>> from collections import deque # collections 모듈에서 deque를 가져옴
>>> a = deque([10, 20, 30])
>>> a
deque([10, 20, 30])
>>> a.append(500) # 덱의 오른쪽에 500 추가
>>> a
deque([10, 20, 30, 500])
>>> a.popleft() # 덱의 왼쪽 요소 하나 삭제
10
>>> a
deque([20, 30, 500])
deque의 append는 덱의 오른쪽에 요소를 추가하고, popleft는 덱의 왼쪽 요소를 삭제한다. 반대로 appendleft는 덱의 왼쪽에 요소를 추가하고, pop으로 덱의 오른쪽 요소를 삭제할 수 있다.
번외로, 알아두면 유용할 것 같은 기능들을 마저 적어놓겠다.
리스트에서 찾고싶은 값의 인덱스로 조회할 수 있는 기능이 있다. 리스트.index(값)으로 조회가 가능하다.
>>> a = [10, 20, 30, 15, 20, 40]
>>> a.index(20)
1
리스트에 원하는 값이 몇 개 들어있는지를 알 수 있는 기능도 있다. 리스트.count(값)으로 이용할 수 있다.
>>> a = [10, 20, 30, 15, 20, 40]
>>> a.count(20)
2
리스트에 존재하는 값의 순서를 거꾸로 뒤집는 방법이 존재한다. 리스트.reverse()로 이용할 수 있다.
>>> a = [10, 20, 30, 15, 20, 40]
>>> a.reverse()
>>> a
[40, 20, 15, 30, 20, 10]
리스트의 요소를 오름차순, 혹은 내림차순으로 정렬할 수도 있다.
- sort() or sort(reverse=False): 리스트의 값을 작은 순서대로 정렬(오름차순)
- sort(reverse=True): 리스트의 값을 큰 순서대로 정렬(내림차순)
>>> a = [10, 20, 30, 15, 20, 40]
>>> a.sort()
>>> a
[10, 15, 20, 20, 30, 40]
리스트를 한 번에 초기화하는 방법도 있다. 리스트.clear()을 사용하면 된다.
>>> a = [10, 20, 30]
>>> a.clear()
>>> a
[]
번외로, 아래의 방법도 있다.
>>> a = [10, 20, 30]
>>> del a[:]
>>> a
[]
리스트 할당과 복사
코드를 먼저 살펴보자.
>>> a = [0, 0, 0, 0, 0]
>>> b = a
위 코드의 의미는 b에 똑같은 리스트를 할당한다는 의미가 아니다.
실제로는 [0, 0, 0, 0, 0]이라는 리스트를 a, b 라는 변수들로 조작한다는 의미로, 이 사실을 간과한다면 아래와 같은 사태가 벌어질 수 있다.
>>> b[2] = 99
>>> a
[0, 0, 99, 0, 0]
>>> b
[0, 0, 99, 0, 0]
이때, 리스트의 논리연산자를 사용하면 두 변수는 같다고 나온다.
>>> a is b
True
그러면 이러한 사태를 일으키지 않으려면 어떻게 할까?
아래와 같은 방법을 사용하면 두 변수가 하나의 리스트를 공유할당하는 사태를 막을 수 있다.
>>> a = [0, 0, 0, 0, 0]
>>> b = a.copy()
그러면, 두 객체는 다르지만 가지고 있는 요소는 같다고 컴퓨터는 인식하며
>>> a is b
False
>>> a == b
True
따라서 어떻게 값을 주는지가 구분된다.
>>> b[2] = 99
>>> a
[0, 0, 0, 0, 0]
>>> b
[0, 0, 99, 0, 0]
리스트 값 출력하기
리스트의 값을 조금 있어보이게 출력하려면 반복문을 이용하여 출력하면 되겠다는 느낌은 온다.
그래서 아래의 코드를 활용하면 처음부터 리스트 끝까지 출력할 수 있다.
>>> a = [38, 21, 53, 62, 19]
>>> for i in a:
... print(i)
...
38
21
53
62
19
하지만 인간의 욕심은 끝이 없기 때문에 더욱 있어보이게 출력하고 싶어한다.
인덱스와 함께 리스트의 요소들을 출력할 수도 있다.
- for 인덱스, 요소 in enumerate(리스트): 를 사용하면 리스트와 함께 해당 인덱스 또한 출력할 수 있으며,
>>> a = [38, 21, 53, 62, 19]
>>> for index, value in enumerate(a):
... print(index, value)
...
0 38
1 21
2 53
3 62
4 19
0부터 시작되는 인덱스가 마음에 들지 않는다면 이런 간단한 방법과
>>> for index, value in enumerate(a):
... print(index + 1, value)
...
1 38
2 21
3 53
4 62
5 19
이런 파이썬다운 방법이 있다.
>>> for index, value in enumerate(a, start=1):
... print(index, value)
...
1 38
2 21
3 53
4 62
5 19
for문 말고도 while문을 이용해서 요소를 반복출력해줄 수 있다.
>>> a = [38, 21, 53, 62, 19]
>>> i = 0
>>> while i < len(a):
... print(a[i])
... i += 1
...
38
21
53
62
19
리스트의 최대, 최소 요소 구하기
C언어를 먼저 배우고 파이썬을 공부한다면, 정렬에 대해서 공부할 때 우선 하나의 배열 값을 정해놓고 그보다 큰 값이 들어온다면 큰 값으로 갱신하고, 작은 값이 들어온다면 무시하는 방법으로 최대요소를 구하는 방법을 사용하곤 했을 것이다.
파이썬에서도 같은 방법을 사용하면 최대, 최소 리스트 요소를 구할 수 있는 것은 마찬가지이다.
>>> a = [38, 21, 53, 62, 19]
>>> smallest = a[0]
>>> for i in a:
... if i < smallest:
... smallest = i
...
>>> smallest
19
>>> b = [38, 21, 53, 62, 19]
>>> largest = b[0]
>>> for in in b:
... if i > largest:
... largest = i
...
>>> largest
62
파이썬에서는 조금 있어보이게 할 수 있지 않을까? 우선, 정렬을 한 후 양 끝값을 구하는 방법이 있을 것이다.
>>> a = [38, 21, 53, 62, 19]
>>> a.sort()
>>> a[0]
19
>>> a.sort(reverse=True)
>>> a[0]
62
하지만, 최대 최소값을 구하고는 싶지만 리스트의 형태를 건드리기 싫을 때에는 더 간단한 방법이 있다. max(), min() 함수를 사용해주면 된다.
>>> a = [38, 21, 53, 62, 19]
>>> min(a)
19
>>> max(a)
62
리스트 요소들의 합계를 구할 때에는 어떻게 해야할까? 이 역시 C다운 방법이 있겠지만, 이미 충분히 구현할 수 있을 것 같으니, sum() 함수에 대해서만 소개하도록 하겠다.
>>> a = [10, 10, 10, 10, 10]
>>> sum(a)
50
리스트 표현식 사용하기
C만 배운 나에게는 혁명적인 이야기가 있다. ‘아니 배열 안에서 for문을 돌린다고 물음표느낌표!?’. 아래와 같은 코드도 파이썬에서는 이상한 이야기가 아니다.
>>> a = [i for i in range(10)] # 0부터 9까지 숫자를 생성하여 리스트 생성
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> b = list(i for i in range(10)) # 0부터 9까지 숫자를 생성하여 리스트 생성
>>> b
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
리스트의 요소들을 이렇게 여러 함수와 코드로 작성해줄 수 있으니 재량껏 코드를 작성해 리스트를 만들어 줄 수 있다. 이제 소개할 것들은 큰 설명 없이 쭉 써내려가도록 하겠다.
리스트 표현식 + if문
>>> a = [i for i in range(10) if i % 2 == 0] # 0~9 숫자 중 2의 배수로 리스트 생성
>>> a
[0, 2, 4, 6, 8]
- for 반복문과 if 조건문 여러 번
>>> a = [i * j for j in range(2, 10) for i in range(1, 10)]
>>> a
[2, 4, 6, 8, 10, 12, 14, 16, 18, 3, 6, 9, 12, 15, 18, 21, 24, 27, 4, 8, 12, 16,
20, 24, 28, 32, 36, 5, 10, 15, 20, 25, 30, 35, 40, 45, 6, 12, 18, 24, 30, 36,
42, 48, 54, 7, 14, 21, 28, 35, 42, 49, 56, 63, 8, 16, 24, 32, 40, 48, 56, 64,
72, 9, 18, 27, 36, 45, 54, 63, 72, 81]
튜플도 리스트와 사용방법이 매우 유사하므로, 그대로 사용하면 된다.
'Language > Python' 카테고리의 다른 글
[CodingDojang] 터틀 그래픽스 이용하기 (0) | 2022.02.23 |
---|---|
[CodingDojang] Python 반복문 사용하기 (0) | 2022.02.22 |
[CodingDojang] Python 조건문 정리 (0) | 2022.02.21 |
[CodingDojang] Python 공부 1, 2일 - 여러 자료형 이용하는 방법 (0) | 2022.02.21 |