Python - Python 리스트와 튜플 응용하기 - 2
Python
- Python 기본
- Python 숫자 계산하기
- Python 변수 만들기
- Python 출력 방법
- Python 불과 비교, 논리 연산자
- Python 문자열 사용하기
- Python 리스트와 튜플 사용하기
- Python 시퀀스 자료형 활용하기
- Python 딕셔너리 사용하기
- Python if 조건문으로 특정 조건일 때 코드 실행하기
- Python else를 사용하여 두 방향으로 분기하기
- Python elif를 사용하여 두 방향으로 분기하기
- Python for 반복문
- Python while 반복문
- Python break, continue로 반복문 제어하기
- Python 중첩루프
- Python FizzBuzz 문제
- Python 터틀 그래픽스로 그림 그리기
- Python 리스트와 튜플 응용하기
- Python 리스트와 튜플 응용하기 - 2
- Python 2차원 리스트 사용하기
- Python 문자열 응용하기
- Python 딕셔너리 응용하기
- Python 세트 사용하기
- Python 파일 사용하기
- Python 회문 판별과 N-gram 만들기
- Python 함수 사용하기
- Python 함수에서 위치 인수와 키워드 인수 사용하기
- Python 함수에서 재귀호출 사용하기
- Python 람다 표현식 사용하기
- Python 클로저 사용하기
- Python 클래스 사용하기
- Python 클래스 속성과 정적, 클래스 메서드 사용하기
- Python 클래스 상속 사용하기
- Python 두 점 사이의 거리 구하기
- Python 예외 처리 사용하기
- Python 이터레이터 사용하기
- Python 제너레이터 사용하기
- Python 코루틴 사용하기
- Python 데코레이터 사용하기
- Python 정규표현식 사용하기
- Python 모듈과 패키지 사용하기
- Python 모듈과 패키지 만들기
리스트와 튜플 응용하기 - 2
—
4. 리스트의 가장 작은 수, 가장 큰 수, 합계 구하기
리스트에 저장된 값 중 가장 작은 수, 가장 큰 수, 요소의 합계를 구해보자.
가장 작은 수와 가장 큰 수 구하기
반복문을 통해 요소를 모두 반복하면서 숫자를 찾아보자. 리스트 a의 요소를 하나씩 꺼내 i에 대입해 준다. 그다음 i가 a[0]의 값인 38보다 작으면 smallest에 대입해주고 차례로 리스트a의 값을 꺼내면서 작은 값을 i에 대입하게 된다. 제일작은 수인 19를 smallest에 대입하고 종료된다. 큰 수를 찾고싶다면 부등호만 바꿔주면 된다.
a = [38, 21, 53, 62, 19]
smallest = a[0]
for i in a:
if i < smallest:
smallest = i
smallest
19
# 리스트 a의 값중 가장 큰 값 찾기
a = [38, 21, 53, 62, 19]
largest = a[0]
for i in a:
if i > largest:
largest = i
largest
62
sort메서드를 사용하여 요소들을 정렬한뒤 가장 작은값과 큰값을 찾아보자.
a = [38, 21, 53, 62, 19]
a.sort()
a[0]
19
#가장 큰값은 정렬을 반대로한 첫번쨰 요소
a.sort(reverse=True)
a[0]
62
파이썬에서 제공하는 min, max함수를 사용하면 더 간단하다.
a = [38, 21, 53, 62, 19]
min(a)
19
max(a)
62
요소의 합계 구하기
이번에는 리스트에서 요소의 합계를 구해보자. 함계를 구할 때도 반복문을 사용할 수 있다. 리스트 a의 요소를 하나씩 꺼내 i에 대입하고 i의 값을 반복해 꺼내 더해준다. 이때 x의 값은 0부터 시작해야한다. x에 다른 값을 할당하면 초기에 x의 값이 추가된채 더해지기 때문에 원하는 값을 얻을 수 없다.
a = [10, 10, 10, 10, 10]
x = 0
for i in a:
x += i # x = x + i
x
50
파이썬에서 제공하는 sum함수를 사용하면 더 간단한다.
a = [10, 10, 10, 10, 10]
sum(a)
50
여기서 설명한 min, max, sum에는 리스트뿐만 아니라 모든 반복 가능한 객체(iterable)를 넣을 수 있다. 반복 가능한 객체는 리스트, 튜플, 딕셔너리, 세트, range등 여러 가지가 있다.
5. 리스트 표현식 사용하기
파이썬의 리스트가 특이한 점은 리스트 안에 for 반복문과 if 조건문을 사용할 수 있다는 점이다. 이렇게 리스트 안에 식, for 반복문, if 조건문 등을 지정하여 리스트를 생성하는 것을 리스트 컴프리헨션(list comprehension)이라고 한다. 컴프리헨션은 능력, 이해력, 시험 등의 뜻도 있지만, 어떤 것을 잡아서 담아둔다는 뜻이 있다. 즉, 식으로 지정해서 생성된 것을 리스트로 잡아두는 것이 리스트 컴프리헨션이다. 개념적으로 보면 “리스트 표현식”이라고 할 수 있다.
리스트 표현식은 다음과 같이 리스트 안에 식, for반복문을 지정한다.
- [식 for 변수 in 리스트]
- list(식 for 변수 in 리스트)
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]
[i for i in range(10)]는 변수 i를 그대로 사용하지만, 다음과 같이 식 부분에서 i를 다른 값과 연산하면 각 연산의 결과를 리스트로 생성한다. 아래와 같이 i+5와 i * 2를 식에 넣으면 i의 값에 연산을 하고 리스트에 담아준다.
c = [i + 5 for i in range(10)] # 0부터 9까지 숫자를 생성하면서 값에 5를 더하여 리스트 생성
c
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
d = [i * 2 for i in range(10)] # 0부터 9까지 숫자를 생성하면서 값에 2를 곱하여 리스트 생성
d
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
리스트 표현식에서 if 조건문 사용하기
이번에는 리스트 표현식에서 if조건문을 사용해 보자. 다음과 같이 if 조건문은 for 반복문 뒤에 지정한다.
- [식 for 변수 in 리스트 if 조건식]
- list(식 for 변수 in 리스트 if 조건식)
[i for i in range(10) if i % 2 == 0]는 0부터 9까지 숫자를 생성하여 2의 배수인 숫자(짝수)로만 리스트를 생성한다. 즉, 다음과 같이 for 반복문 뒤에 if 조건문을 지정하면 숫자를 생성한 뒤 if 조건문에서 특정 숫자만 뽑아내서 리스트를 생성한다.
a = [i for i in range(10) if i % 2 == 0] # 0~9 숫자 중 2의 배수인 숫자(짝수)로 리스트 생성
a
[0, 2, 4, 6, 8]
마찬가지로 식에 연산을 추가해 리스트를 만들 수 있다.
b = [i + 5 for i in range(10) if i % 2 == 1] # 0~9 숫자 중 홀수에 5를 더하여 리스트 생성
b
[6, 8, 10, 12, 14]
for 반복문과 if 조건문을 여러 번 사용하기
리스트 표현식은 for과 if를 여러번 사용할 수도 있다.
[식 for 변수1 in 리스트1 if 조건식1 for 변수2 in 리스트2 if 조건식2 ... for 변수n in 리스트n if 조건식n]
list(식 for 변수1 in 리스트1 if 조건식1 for 변수2 in 리스트2 if 조건식2 ... for 변수n in 리스트n if 조건식n)
아래는 i와 j에 각각 range로 값을 대입해 구구단을 만들었다.
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]
# 들여쓰기를 해주는 게좋다.
a = [i * j for j in range(2, 10)
for i in range(1, 10)]
6. 리스트에 map 사용하기
리스트와 반복문을 사용해 모든 요소를 출력해 보자.
for 반복문으로 요소 출력하기
리스트에 map을 사용해보자. map은 리스트의 요소를 지정된 함수로 처리해주는 함수이다.(map은 원본 리스트를 변경하지 않고 새 리스트를 생성한다.)
- list(map(함수, 리스트))
- tuple(map(함수, 튜플))
실수가 저장된 리스트가 있을때 리스트의 모든 요소를 정수로 변환해 주자. 먼저 for반복문으로 변환하는 방법이다. len(a)로 리스트의 길이를 구하고 range로 인덱스 값을 i에 대입해 줬다. 요소를 하나씩 꺼내 int (정수)로 변환해 다시 저장했다.
a = [1.2, 2.5, 3.7, 4.6]
for i in range(len(a)):
a[i] = int(a[i])
a
[1, 2, 3, 4]
이번에는 map을 사용하여 변환해보자. a = list(map(int, a))한 줄로 변환 할 수 있다. map에 리스트와 int를 넣으면 리스트의 모든 요소를 int를 사용해서 변환한다. 다음에 list를 사용해서 map의 결과를 다시 리스트로 만들어준다.
a = [1.2, 2.5, 3.7, 4.6]
a = list(map(int, a))
a
[1, 2, 3, 4]
range를 사용해 숫자를 만든 뒤 문자열로 변환하는것도 가능하다.
a = list(map(str, range(10)))
a
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
input().split()과 map
지금까지 input().split()으로 값을 여러 개 입력받고 정수, 실수로 변환할 때도 map을 사용했었다. 그렇게 쓰일수 있는 이유는 input().split()의 결과가 문자열 리스트라서 map을 사용할 수 있었던 것이다. 10 20을 입력하면 [‘10’, ‘20’]처럼 문자열 두 개가 들어있는 리스트가 만들어진다.
a = input().split()
10 20 (입력)
a
['10', '20']
이제 map을 사용해 정수로 변환해 보자. 10 20을 입력하면 맵 객체(map object)가 만들어지는데 이 상태로는 안에 들어있는 값을 볼 수 없다. list를 사용해서 리스트로 출력하고 리스트를 보면 [10, 20]처럼 정수 두 개가 들어있는걸 확인할 수 있다.
a = map(int, input().split())
10 20 (입력)
a
<map object at 0x03DFB0D0>
list(a)
[10, 20]
이 리스트 [10, 20]을 변수 두 개에 저장하면 지금까지 사용한 a, b = map(int, input().split())와 같은 동작이 된다.
a, b = [10, 20]
a
10
b
20
사실 map이 반환하는 맵 객체는 이터레이터라서 변수 여러 개에 저장하는 언패킹(unpacking)이 가능하다. 그래서 a, b = map(int, input().split())처럼 list를 생략한 것이다 a, b = map(int, input().split())을 풀어서 쓰면 다음과 같은 코드가 된다.
x = input().split() # input().split()의 결과는 문자열 리스트
m = map(int, x) # 리스트의 요소를 int로 변환, 결과는 맵 객체
a, b = m # 맵 객체는 변수 여러 개에 저장할 수 있음
7. 튜플 응용하기
이번에는 튜플의 메서드와 다양한 사용 방법을 알아보자. 튜플은 리스트와 달리 내용을 변경할 수 없다. 따라서 내용을 변경하는 append같은 메서드는 사용할 수 없고, 요소의 정보를 구하는 메서드만 사용할 수 있다.
튜플에서 특정 값의 인덱스 구하기
index(튜플요소의 값) 은 튜플에서 특정 값의 인덱스 값을 구할 수 있다. 같은 값이 여러 개일 경우 처음 찾은 인덱스를 구한다.
a = (38, 21, 53, 62, 19, 53)
a.index(53)
2
특정 값의 개수 구하기
count(튜플요소의 값)은 튜플에서 특정 값의 개수를 구한다. 다음은 튜플(10, 20, 30, 15, 20, 40)에서 20의 개수를 구한다.
a = (10, 20, 30, 15, 20, 40)
a.count(20)
2
for 반복문으로 요소 출력하기
for 반복문으로 튜플의 요소를 출력한다.
a = (38, 21, 53, 62, 19)
for i in a:
print(i, end = ' ')
38 21 53 62 19
튜플 표현식 사용하기
튜플을 리스트 표현식처럼 생성할 떄는 다음과 같이 tuple안에 for반복문과 if 조건문을 지정한다.
- tuple(식 for 변수 in 리스트 if 조건식)
a = tuple(i for i in range(10) if i % 2 == 0)
a
(0, 2, 4, 6, 8)
참고로 ( )(괄호) 안에 표현식을 넣으면 튜플이 아니라 제너레이터 표현식이된다.(뒤에 배울 내용)
tuple에 map 사용하기
튜플에 map을 사용하는 방법도 리스트와 같다.
a = (1.2, 2.5, 3.7, 4.6)
a = tuple(map(int, a))
a
(1, 2, 3, 4)
튜플에서 가장 작은 수, 가장 큰 수, 합계 구하기
튜플도 min, max 함수로 가장 작은 수와 가장 큰 수를 구하고, sum 함수로 요소의 합계를 구할 수 있다.
a = (38, 21, 53, 62, 19)
min(a)
19
max(a)
62
sum(a)
193
Subscribe to My Coding Practice Gym
Get the latest posts delivered right to your inbox