Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
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
Archives
Today
Total
관리 메뉴

yeon-coding

6. List(1) 본문

[Python]/Lecture

6. List(1)

yeonTCH 2019. 12. 4. 22:58

 contents

 

1. 리스트의 기본 
1-1. 리스트의 개념 
1-2. 리스트의 필요성 
1-3. 리스트의 일반적인 사용 
1-3-1. 빈 리스트의 생성과 항목추가 
1-4. 리스트의 생성과 초기화 
1-5. 리스트 값에 접근하는 다양한 방법 
<<project 6-1>> 
<<project 6-2>> 
quiz

 


 

 

 

안녕하세요~! 다들 잘 지내셨나요?

저번에는 반복문에 대해 배웠는데요. 기억이 안나시는 분들은 내용을 훑고 오시는 것을 추천드립니다.

 

오늘은 변수의 집합이라고 할 수 있는 리스트에 대해 배울 예정이예요.

 

다음은 오늘의 프로젝트입니다.

 

 

<1. 16진수 정렬 프로그램>

 

 


 

1. 리스트의 기본

 

 

 

 

1-1. 리스트의 개념

지금까지 변수의 개념은 박스로 비유했습니다. 

변수박스를 하나씩 사용하던 것이라고 한다면,

리스트는 그러한 박스(변수)를 한 줄로 붙여놓은 것입니다.

 

 

 

 

지금까지는 변수(박스)의 이름을 각각 a, b, c, d식으로 지정해서 사용해왔지만,

리스트는 박스를 한 줄로 붙인후 전체에 이름(aa)을 지정합니다.

 

그리고 각각은 aa[0], aa[1], aa[2], aa[3]처럼 번호(인덱스)를 붙여 사용합니다.

참고) 반복문에서 배웠듯이, 컴퓨터는 숫자를 0부터 셉니다.

 

 

 

 


 

 

 

 

1-2. 리스트의 필요성

 

 

지금까지는 변수를 하나씩 사용해도 별 문제가 없었는데요.

리스트라는 머리 아픈 개념을 도입한 이유는 무엇일까요?

 

전에 배웠던 내용을 바탕으로 a,b,c,d라는 정수형 변수 4개를 선언한 후

이 변수에 값을 입력받고 합계를 출력하는 프로그램을 작성해 봅시다.

 

가능하면 코드를 보지말고 직접 작성해주세요!

이번 코드는 복사를 방지하기 위해 이미지로 넣었습니다.

 

 

 

↓정답을 확인하려면 '더보기'를 펼쳐주세요↓

더보기

##Code 7-1##

 

Output

1번째 숫자 : 10
2번째 숫자 : 20
3번째 숫자 : 30
4번째 숫자 : 40
합계 ==> 100

 

 

 

 

 

이번에는 좀 더 많은 숫자를 입력받아 봅시다. 10개쯤은 어떨까요??

위의 코드를 그대로 사용한다면, e, f, g, h, i, j 등 변수를 6개 더 추가해야합니다.

코드가 좀 더 길어지겠지만 아직까지는 괜찮은데요...

 

 

그렇다면, 변수가 100개라면 어떨까요?

 

 

a1, a2, ... 변수 이름을 하나하나 지어야하고, 입력도 100개 받아야합니다.

코드의 수가 엄청 길어지고, 시간도 너무 많이 걸리겠죠?

 

 

 

 

 

 

이때, 필요한 것이 리스트입니다.

리스트를 생성하는 방법은 다음과 같습니다. 리스트는 대괄호 []안에 값을 선언합니다.

 

리스트명 = [값1, 값2, 값3, ...]

 

 

다음 코드는 값 4개를 담은 정수형 리스트를 생성합니다.

 

aa = [10, 20, 30, 40]

 

 

 

 

 

 

① 각 변수 사용 ② 리스트 사용

a, b, c, d = 10, 20, 30, 40

a 사용

b 사용

c 사용

d 사용

 

aa = [10, 20, 30, 40]

aa[0] 사용

aa[1] 사용

aa[2] 사용

aa[3] 사용

 

리스트를 사용하지 않는다면, 각 변수를 ①처럼 a, b, c, d로 사용합니다.

하지만 리스트는 인덱스를 사용해 ②처럼 aa[1], aa[2], aa[3], aa[4]로 사용합니다.

 

 

 

이때, 위의 참고에서 말했듯이,

항목이 4인 리스트를 생성했다면 인덱스는 1~4가 아닌 0~3을 사용해야 합니다.

인덱스는 0부터 시작한다는 것을 꼭 기억해주세요!

 

 

 

 

 

 

이제 ##Code 6-1##를 리스트로 사용하는 프로그램으로 수정해 봅시다.

 

↓Code 6-1을 다시 확인하려면 아래의 글을 펼쳐주세요↓

더보기

##Code 6-1##

Input

##Code 6-2##
aa = [0,0,0,0]
hap = 0
aa[0] = int(input("1번째 숫자: "))
aa[1] = int(input("2번째 숫자: "))
aa[2] = int(input("3번째 숫자: "))
aa[3] = int(input("4번째 숫자: "))
hap = aa[0] + aa[1] + aa[2] + aa[3]
print("합계==>%d" %hap)

Output

1번째 숫자: 10
2번째 숫자: 20
3번째 숫자: 30
4번째 숫자: 40
합계==>100

 

##Code 6-1##의 1행에서는 변수를 4개 설정했으나,

여기서는 aa=[0,0,0,0]으로 항목이 4개 있는 리스트를 생성합니다.

 

4행에서는 a 대신 aa[0]를 사용하고, 5~7행에서도 리스트 aa를 사용합니다.

 

출력 결과는 리스트를 사용하기 전과 동일합니다.

 

 

 

리스트로 숫자 100개를 더하려면 aa = [0,1, ... , 99]를 생성한 후,

aa[0] + aa[1] + ... + aa[99]를 작성하면 됩니다.

 

이 역시 번거로운데 저번 시간에 배운 반복문과 결합하면 수고를 줄일 수 있습니다.

 

 

 

 

 

 

 


 

 

 

 

 

 

1-3. 리스트의 일반적인 사용

 

 

리스트의 기본 사용은 이해했으므로 조금 더 나아가 봅시다.

##Code 6-2##에서는 인덱스의 특성을 제대로 응용하지 못했습니다.

 

 

하지만 ,이 인덱스도 반복문과 결합하면 수고를 상당히 줄일 수 있는데요.

 

여기서는 인덱스와 반복문의 관계뿐만 아니라 리스트에 값을 입력하는 방법,

리스트의 크기를 알아내는 방법을 살펴보겠습니다.

 

 

 

 

 

 

 

1-3-1. 빈 리스트의 생성과 항목추가

 

 

##Code 6-2##의 1행에서는 항목 4개를 aa=[0,0,0,0]으로 만들었습니다.

같은 방법으로 먼저 빈 리스트를 만들고

리스트명.append(값) 함수로 리스트에 항목을 하나씩 추가할 수 있습니다.

 

 

 

Input

aa=[]
aa.append(0)
aa.append(0)
aa.append(0)
aa.append(0)
print(aa)

Output

[0,0,0,0]

 

 

첫 번째 줄의 aa=[]는 빈 리스트를 생성합니다.

거기에 append() 함수로 0값을 4번 추가하여,

##Code 6-2##의 1행과 동일한 결과를 얻을 수 있습니다.

 

 

 

 

그런데 오히려 더 불편하게 느껴지시죠?

지금처럼 항목이 4개인 리스트를 만들 때는 aa=[0,0,0,0]로 생성하는 것이 더 낫습니다.

 

 

 

 

 

하지만 항목이 100개, 즉 큰 리스트를 만들 때는 이야기가 달라집니다.

이때는 append() 함수와 함께 for문을 활용하면 간단히 해결됩니다.

 

Input

aa=[]
for i in range(0,100):
aa.append(0)
len(aa) #len()은 길이를 리턴하는 함수

Output

100

 

for 문으로 100번(0~99)을 반복해

리스트명.append(0)으로 항목이 100개인 리스트를 만들었습니다.

 

또한 항목을 전부 출력하면 너무 많아 len(리스트) 함수로 리스트의 개수만 확인했습니다.

 

 

 

 

 

이제는 Code 6-2를 더 그럴듯하게 수정할 차례입니다.

Code 6-2는 최초로 리스트를 사용해 작성한 프로그램으로 결과를 잘 얻기는 했으나,

그다지 효율성은 느낄 수 없었습니다.

 

리스트의 인덱스를 활용하는 프로그램이 아니기 때문입니다.

마치 for문과 while문을 배우기 전에 수행했던 것과 같은 중노동이 필요한 상황이죠.

 

Code 6-2를  다시 확인하려면 아래의 글을 펼쳐주세요↓

더보기

Input

##Code 6-2##
aa = [0,0,0,0]
hap = 0
aa[0] = int(input("1번째 숫자: "))
aa[1] = int(input("2번째 숫자: "))
aa[2] = int(input("3번째 숫자: "))
aa[3] = int(input("4번째 숫자: "))
hap = aa[0] + aa[1] + aa[2] + aa[3]
print("합계==>%d" %hap)

Output

1번째 숫자: 10
2번째 숫자: 20
3번째 숫자: 30
4번째 숫자: 40
합계==>100

 

 

결국 리스트의 인덱스가 순서대로 변할 수 있도록

반복문과 함께 활용해야 리스트의 가치가 빛납니다.

 

 

 

 

이번에는 입력 부분에 for문을 활용합시다.

 

 

 

먼저 그림을 살펴보겠습니다.

 

값을 입력하려고 for문을 4번 돌면서 aa[i]의 인덱스를 aa[0]에서 aa[3]까지 변하게 합니다.

그러면 변수 4개에 자동으로 값이 입력됩니다.

 

Input

##Code 6-3##
#초기화
aa = []
for i in range(0,4):
aa.append(i)
hap = 0
#리스트 값 입력
for i in range(0,4):
aa[i] = int(input(str(i+1)+"번째 숫자: ")) #인덱스 i가 0부터 시작하므로 i+1로 출력
#str() 함수는 ()안의 내용을 string함수로 변경
hap = aa[0]+aa[1]+aa[2]+aa[3]
print("합계==>%d" % hap)

Output

1번째 숫자: 10
2번째 숫자: 20
3번째 숫자: 30
4번째 숫자: 40
합계==>100

2행에서 빈 리스트를 만들고, 3~4행에서 4번을 반복해 항목이 4개인 리스트로 만들었습니다.

결국 2~4행은 aa=[0,0,0,0]과 동일합니다.

 

9행에서 i가 0에서 3까지 반복됩니다.

10행의 input() 함수는 인덱스 i가 0부터 시작하므로 i+1로 출력합니다.

그리고 str()함수가 숫자를 문자로 변환한 후

"번째 숫자: "와 합쳐지므로 '1번째 숫자:" 등으로 출력됩니다.

 

10행의 인덱스 i가 0에서 3까지 4번 변경되므로

aa[0],aa[1],aa[2],aa[3] 등 변수 4개에 값을 차례대로 입력하면 위의 그림과 같이 작동합니다.

 

11행에서는 변수 4개를 더합니다.

이때 리스트의 개수가 100개라면 hap = aa[0]+aa[1]+aa[2]+...+a[99]로 해야하므로

9행도 다음과 같이 for문으로 변경하겠습니다.

for i in range(0,4):
hap = hap + aa[i]

 

 

 

 

 


 

 

 

 

 

1-4. 리스트 생성과 초기화

 

 

이미 앞에서 여러 번 언급했지만, 리스트는 대괄호 []로 생성됩니다.

다음은 리스트를 다양하게 생성하는 코드입니다.

 

aa=[] # 빈 리스트 생성
bb=[10,20,30] #정수형 리스트 생성
cc=['파이썬','yeon','얍얍'] #문자열 리스트 생성
dd=[10,'안녕',60] #다양한 데이터형의 리스트 생성

 

1행은 빈 리스트롤 생성합니다.

2행은 정수로만 구성된 리스트를 생성하고,

3행은 문자열로만 구성된 리스트를 생성합니다.

마지막으로 4행은 다양한 데이터형을 섞어 리스트를 생성합니다.

 

 

다른 언어를 배워보셨나요?

다른 언어는 리스트에서 한 가지의 데이터형만 사용해야하는데,

이와 달리 파이썬은 다양한 데이터형을 섞을 수 있습니다.

 

 

 

 

 

 

 

 

앞에서도 잠깐 다루었지만 리스트를 초기화할 때 for문을 활용하기도 합니다.

 

리스트가 100개인 aa에 0,2,4,...(2의 배수)로 초기화한 후

리스트 bb에 역순으로 넣는 과정을 살펴봅시다.

 

 

위의 그림을 코드로 구현하려면 먼저 리스트 aa에 append() 함수로 값을 넣어줍니다.

그런 다음 리스트 aa 값의 역순으로 bb에 append() 함수로 값을 추가해 주면 됩니다.

 

Input

##Code 6-4##
#초기화
aa = []
bb = []
value = 0
#aa에 값 추가
for i in range(0,100):
aa.append(i)
value +=2
#bb에 역순으로 입력
for i in range(0,100):
bb.append(aa[99-i])
print("bb[0]에는 %d이, bb[99]에는 %d이 입력됩니다." % (bb[0],bb[99]))

Output

bb[0]에는 198이, bb[99]에는 0이 입력됩니다.

 

3~4행에서 빈 리스트 aa,bb를 생성합니다.

5행의 value는 0,2,4,...로 증가시킬 값입니다.

8행에서 100번을 반복하는데, 9~10행에서 리스트 aa에 value를 추가한 후 2씩 증가시킵니다.

 

13행에서도 0~99로 100번 반복하는데, 14행에서 i가 0일 때 99-i는 99가 됩니다.

i가 1일 때는 98, 2일 때는 97처럼 계속 변해 마지막으로 i가 99일 때는 0이 됩니다.

 

리스트 bb에는 aa[99], aa[98], aa[97], ... , aa[0]의 값이 추가되므로

결국 리스트 aa값이 리스트 bb에 역순으로 입력되는 것입니다.

 

마지막 행에서는 확인을 위해 bb[0]과 bb[99]를 출력합니다.

 

 

 

 

 


 

 

 

 

 

 

 

1-5. 리스트 값에 접근하는 다양한 방법

 

 

생성된 리스트는 인덱스로 접근할 수 있습니다.

앞에서도 이미 여러 번 리스트명[인덱스] 형식으로 접근했었죠.

 

 

이번에는 음수값 인덱스로 접근해보겠습니다.

 

Input

aa = [10, 20, 30, 40]
print("aa[-1]은 %d, aa[-2]는 %d" % (aa[-1],aa[-2]))

Output

aa[-1]은 40, aa[-2]는 30

 

인덱스는 맨 뒤에서부터 -1 값으로 사용되는 것을 확인할 수 있습니다.

앞의 예는 aa[-4]까지 접근되므로 aa[-5]는 오류가 발생할 것입니다.

 

 

 

 

 

리스트에 접근할 때 콜론(:)을 사용해 범위를 지정할 수도 있습니다.

'리스트명[시작값 : 끝값+1]'은 리스트의 시작 위치부터 끝 위치까지 모든 값을 의미합니다.

aa[0:3]은 0부터 2까지, 즉 aa[0], aa[1], aa[2]가 됩니다.

aa[3]은 포함되지 않는다는 점에 주의하세요!

 

 

Input

aa = [10, 20, 30, 40]
aa[0:3]
aa[2:4]

Output

[10,20,30]
[30,40]

 

 

 

 

 

또는 콜론의 앞이나 뒤 숫자를 생략할 수도 있습니다.

 

aa[2:]는 aa[2]부터 끝까지 의미하며, aa[2:]는 aa[2]부터 끝까지를 의미하며,

aa[:2]는 처음부터 aa[1]까지 의미합니다.

 

Input

aa = [10, 20, 30, 40]
aa[2:]
aa[:2]

Output

[30,40]
[10,20]

 

 

 

 

 


 

 

 

여기까지 모두 따라왔다면 계산기 프로그램을 만들어 보도록하겠습니다.

 

 

 

<<Project 6-1>>

 

Code 6-3에서 값을 4개가 아닌 10개를 입력받아 합계를 출력하도록 수정하고,

for문 대신 while문을 사용해 봅시다.

 

Input

##Code 6-3##
#초기화
aa = []
for i in range(0,4):
aa.append(i)
hap = 0
#리스트 값 입력
for i in range(0,4):
aa[i] = int(input(str(i+1)+"번째 숫자: ")) #인덱스 i가 0부터 시작하므로 i+1로 출력
#str() 함수는 ()안의 내용을 string함수로 변경
hap = aa[0]+aa[1]+aa[2]+aa[3]
print("합계==>%d" % hap)

Output

1번째 숫자: 10
2번째 숫자: 20
3번째 숫자: 30
4번째 숫자: 40
합계==>100

 

 

 

<<Project 6-2>>

 

Code 6-4를 리스트를 aa에 3의 배수를 200개 입력하도록 수정해 봅시다.

그리고 리스트 bb에는 리스트 aa의 역순으로 입력해 보자. 최종적으로 bb[0]와 bb[199]의 값을 출력하면 다음과 같다.

Input

##Code 6-4##
#초기화
aa = []
bb = []
value = 0
#aa에 값 추가
for i in range(0,100):
aa.append(i)
value +=2
#bb에 역순으로 입력
for i in range(0,100):
bb.append(aa[99-i])
print("bb[0]에는 %d이, bb[99]에는 %d이 입력됩니다." % (bb[0],bb[99]))

 Code 6-4 Output

##Code 6-4 Output##
bb[0]에는 198이, bb[99]에는 0이 입력됩니다.

 Project Output

##Project Output##
bb[0]에는 597이, bb[199]에는 0이 입력됩니다.

 

 


오늘 List(1) 포스팅은 여기까지입니다.

다음 차시에선 리스트 값의 변경, 리스트 조작함수, 2차원 리스트에 대해 배우도록 하겠습니다.

 

 

궁금한 점이나 질문이 있다면 우측 하단의 실시간 채팅을 이용하시면 답변해드리도록 하겠습니다!

 

 

 

이 포스팅의 퀴즈, 프로젝트 등에 대해 토론을 하고 싶으시면

2019/12/06 - [[Python]/Dicussion] - [discussion] ask or discuss <6. List(1)>

에 가시면 됩니다 :)

 

 

퀴즈에 대한 답을 구글 설문지에 작성해 제출해주시면 정답을 발송해드립니다.

 

 

'[Python] > Lecture' 카테고리의 다른 글

5.Repetitive Statement(While)  (0) 2019.11.24
4.Repetitive Statement(For)  (0) 2019.11.18
3.Conditional sentence  (0) 2019.11.11
2.Operator  (0) 2019.10.27
1. Variable and Data type  (0) 2019.10.08
Comments