Python 기초 공부하기 (1-6.리스트)
1-6. 리스트
* 리스트의 형식
리스트명 = [데이터, 데이터 .....]
예제) # 리스트의 형식
abc=[1,2,3,4,5]
print(abc)
예제) #len()으로 리스트 길이 알아내기
abc = [1,2,3,4,5]
print(len(abc))
* 리스트의 사용
예제)
spending = [10,20,30,40,50]
print(spending[0])
예제) #리스트의 값 변경
print('3월 지출 변경 전:', spending)
spending[2] += 10
print('3월 지출 변경 후:', spending)
* 반복문으로 리스트 다루기
예제) #반복문 for을 통한 리스트명 사용
for i in [10,20,30,40,50]:
print(i)
예제) #index를 사용한 리스트 요소 출력
spending = [10,20,30,40,50]
for i in range(6):
print(i+1, '월 지출은', spending[i]) #인덱스의 범위는 항상 0부터 a-1까지
예제) #index대신 len()을 사용한 리스트 요소 출력
for i in range(len(spending)):
print(i+1, '월 지출은:', spending[i], end=', ')
# index() = len() - 1
# 음수 인덱스도 존재. 오른쪽에서 시작하는 음수 인덱스는 -1부터 시작됨. 0부터 시작하지 않음.
* 리스트에 요소 추가 후 삭제
요소 추가 형식 : 리스트명.append(데이터)
예제)
food = ['피자', '치킨', '떡볶이', '파스타']
food.append('돈까스')
print(food)
예제) # input()에 해야 할 일을 입력받고, append()로 리스트에 추가
to_do=[]
task=input('해야 할 일을 입력해주세요 :')
to_do.append(task)
print(to_do)
예제) # range를 통해 5개를 입력받고, to_do리스트에 추가
to_do=[]
task=input('해야 할 일을 차례대로 입력해주세요 :')
for i in range(5):
to_do.append(input())
print(to_do)
요소 삭제 형식 : 리스트명.remove(데이터)
del 리스트명[인덱스]
예제) # food에서 '치킨'을 삭제
1
food = ['피자', '치킨', '떡볶이', '파스타']
food.remove('치킨')
print(food)
2
food = ['피자', '치킨', '떡볶이', '파스타']
del food[-3]
print(food)
* 리스트에서 필요한 요소만 꺼내기
리스트 슬라이싱 : 리스트에서 원하는 요소만을 골라내는 것
food[a:b] = food[a]부터 food[b-1]까지
예제)
food = ['피자', '치킨', '떡볶이', '파스타']
print(food[0:3]) # [a:b] = a부터 b-1까지
예제)
spending_6mon = [25,36,8,53,24,56]
print('1월부터 3월까지 지출:', spending_6mon[:3])
print('4월부터 6월까지 지출:', spending_6mon[2:5])
print('7월부터 9월까지 지출:', spending_6mon[-2:])
split()으로 문자열 나누기
형식 : 문자열.split()
예제) # split 소괄호 안에 아무것도 지정하지 않으면 공백을 기준으로 나눔.
a='가나다 라마바사'
print(a.split())
print(a.split()[0])
print(a.split()[1])
예제) # 하이픈(-)을 기준으로 split을 진행
a='가나다-라마바사'
print(a.split('-'))
print(a.split('-')[0])
print(a.split('-')[1])
* 다양한 리스트 명령어 사용하기
정렬하기 : a.sort()
아무것도 지정하지 않으면, 기본 오름차순으로 정렬됨.
내림차순 지정 : sort(reverse=True)
예제) # 가장 큰 숫자 2개만 뽑아내기 : 내림차순 정렬 후 슬라이싱
a=[1,2,3,4,5,6]
a.sort(reverse=True)
print(a[0:2])
예제) # 최대값과 최소값, 합 구하기
a=[1,2,3,4,5,6]
print(max(a), min(a), sum(a))
찾으려는 데이터를 index()의 소괄호에 넣으면 해당 데이터가 리스트의 어느 위치에 있는지,
즉 인덱스 번호를 알려줌.
예제) # 인덱스 찾기
a=[1,2,3,4,5,6]
print(a.index(3)) # 3의 위치는 (0에서 세었을 때)2번째에 있음
* 조건문으로 리스트 다루기
예제) search를 이용해서 'index+1'로 숫자를 찾음
a = ['1','2','3','4','5']
search=input('찾는 숫자는?')
if search in a:
print(a.index(search)+1, '위입니다')
else:
print(search, '은/는 순위에 없습니다.')
* 중첩제어구조(조건문, 반복문 함께)로 리스트 다루기
예제) # 랜덤으로 0에서 100까지의 숫자를 25개 뽑아, 70점 이상인 점수 출력 (리스트, 인덱스 모두 사용)
import random
score = [ ]
for i in range(25):
score.append(random.randint(0,100))
print(score)
print('리스트를 사용해 70점 이상인 점수 출력하기.')
for s in score : #점수가 s 변수에 담기고, s의 값이 70 이상일 때 학생번호와 점수 출력.
if s>=70:
print(score.index(s)+1, '번', s ) #학생 번호는 1부터 시작하므로 0부터 시작하는 index에서 +1
print('인덱스를 사용해 70점 이상인 점수 출력하기.')
for i in range(25):
if score[i]>=70:
print(i+1, '번', score[i])
* 리스트로 간단한 프로그램 만들기
예제) # 지하철 게임을 만들어보기
print('지하철~ ' * 4)
#10번 반복한다고 가정
for i in range(10):
station=input()
if station not in line2: #line2 : 2호선의 역명을 작성한 리스트
print('땡!')
break
* 이차원리스트란?
리스트 안에 리스트가 있는 것
형태 : [[1,2,3],[4,5,6],[7,8,9]]
[[1,2,3],
[4,5,6],
[7,8,9]] (이런 식으로 줄을 바꿔서 작성해도 무방)
예제)
abc = [[1,2,3],[4,5,6],[7,8,9]]
print(abc[0])
print(abc[1])
print(abc[2])
예제) #이차원 리스트에서의 숫자 1개를 출력하는 인덱스
abc = [[1,2,3],[4,5,6],[7,8,9]]
print(abc[0][1])
print(abc[1][2])
* 반복문으로 이차원 리스트 다루기
반복문으로 이차원 리스트를 다룰때는 일반적으로 row라는 변수를 사용.
예제)
for row in abc:
print(row)
예제) # 이차원 리스트의 첫번째 열을 출력
for row in abc:
print(row[0])
예제) # 이차원 리스트의 마지막 열을 출력
for row in abc:
print(row[-1])
* 이차원 리스트로 간단한 프로그램 만들기
예제) #올림픽의 국가의 금메달 개수 출력
순위 국가 금메달 은메달 동메달 합계
olympic = [[1, '미국', 1, 2, 3, 4],
[2, '영국', 5, 6, 7, 8],
[3, '중국', 9, 10, 11, 12],
[4, '러시아', 13, 14, 15, 16],
[5, '독일', 17, 18, 19, 20],
[6, '일본', 21, 22, 23, 24]]
print(olympic[0][1], '금메달 개수:', olympic[0][2])
print(olympic[4][1], '금메달 개수:', olympic[4][2])
예제) # 올림픽의 국가의 금은동 메달 개수 (이차원리스트 슬라이싱 사용)
print(olympic[0][1], '금은동 메달 개수:', olympic[0][2:5])
print(olympic[4][1], '금은동 메달 개수:', olympic[4][2:5])
예제) #올림픽의 국가와 순위만 출력
for row in olympic:
print(row[:2])
예제) # 금메달보다 은메달이 더 많은 나라 찾아보기 (중첩 제어구조 사용)
print('은메달이 금메달보다 많은 나라')
for row in olympic:
if row[2] < row[3]: #row2는 금메달 수의 열, row3은 은메달 수의 열
print(row[1]) #row1은 국가명