1. Python

Python 기초 공부하기 (1-6.리스트)

yj.cho 2023. 2. 16. 13:41

 

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은 국가명