본문으로 바로가기

파일의 IT 블로그

  1. Home
  2. 프로그래밍 강좌/Python [리뉴얼중]
  3. [파이썬 강좌] #7 리스트의 활용

[파이썬 강좌] #7 리스트의 활용

· 댓글개 · KRFile

리스트

아래는 리스트의 사용 형태입니다.


리스트 = ['항목1', '항목2', '항목3', (...)]
리스트라는 말 그대로 여러 항목이 들어있는 형태의 변수입니다.

사실 항목이라는 말보단 요소(element) 라는 말을 더 많이 사용합니다.

 

글에서 요소라고 하면 리스트 항목을 말하는 것이라고 이해하시면 됩니다.

 

한 리스트 변수에는 여러 가지 값들을 담아낼 수 있습니다.

 

C언어 및 타언어를 해보신 분들이라면 Array(배열)과 비슷해보이지만 파이썬의 리스트에서는 배열처럼 크기를 꼭 지정해주거나 맞추어서 사용하지 않아도 됩니다.

 

파이썬의 리스트의 항목(요소)은 원하는대로 삭제, 삽입 할 수 있으며 크기가 동적으로 자동 관리 됩니다. 또한 리스트에는 여러 자료형의 변수를 한번에 저장할 수 있는 장점이 있습니다.

 

과일 = ['사과', '배', '참외', 3]

print(과일)

>>> ['사과', '배', '참외', 3]

 

과일 리스트의 출력 형태입니다.
여기서 파이썬 리스트의 특징을 볼 수 있는데요. 파이썬의 리스트는 여러가지 *자료형의 값들을 한 리스트에 넣을 수 있습니다.

 

*자료형 (Data-type) : 변수가 저장하는 데이터의 형태 ex) 정수, 문자열

 

사과, 배, 참외라는 문자열과 3이라는 숫자가 과일이라는 리스트에 전부 들어가 있는걸 볼 수 있습니다.

 

과일 = ['사과', '배', '참외', 3]

print(과일[0])
>>> 사과

print(과일[1])
>>> 배

print(과일[0:2])
>>> ['사과', '배']

리스트에서 원하는 순서의 값을 가져올땐 리스트명[인덱스값] 의 형태로 가져옵니다.


인덱스는(=순번) 1이 아닌 0부터 시작임에 유의합니다.

예를 들어서 저 과일이라는 리스트에 들어있는 항목 '참외' 의 경우엔 1부터 세는 사람이 보기엔 3번째에 있지만 컴퓨터는 0부터 새므로 인덱스상으로는 2번째 인덱스에 들어가 있습니다.

 

그래서 과일[2] 를 출력해보면 참외가 출력됩니다.

인덱스로 리스트의 값을 빼오는건 이해하셨을 것이고, 만약에 저 과일 이라는 리스트에서 '배' 라는 항목이 몇 번째 인덱스에 있는건 어떻게 알까요?

 

과일 = ['사과', '배', '참외']
print(과일.index('배'))

>>> 1

이렇게 하면 됩니다. 참쉽죠?


그러면 리스트를 이용하여 생선가게를 한번 구현해봅시다.

 

생선가게 = ['조기', '갈치', '고등어', '연어']

msg = input('무엇을 드릴까요 ? : ')
if msg != '':
    if msg in 생선가게:
        print('여기 있습니다~~')
    else:
        print('그 품목은 현재 판매중이 아닙니다.')
else:
    print('입력되지 않았습니다.')

입력 : 고등어
>>> 여기 있습니다~~

여기서 != 이 무엇인지 궁금해 하시는 분들이 있을건데요.
!은 NOT(아님)의 의미로써 != 는 같지 않을경우를 의미합니다.

 

이전에 사용했던 같음을 비교하는 == 와 정반대 기능을 하는 녀석이라고 보시면 되겠습니다.

 

제일 처음 사려는 품목이 공백인지 아닌지 if문으로 체크해줍니다. 사려는 품목이 없으면 안되니깐요.
그리고 msg in 생선가게 을 사용해서 리스트에서 입력한 값(msg)이 리스트 안에 있는지 없는지 체크하게 됩니다.

그에 따라 print로 출력해주는 예제입니다.

 

어렵게 생각하지 마시고 영어 문법 그대로 읽어내시면 됩니다.

 

브라우저 = ['인터넷 익스플로러', '파이어폭스', '구글 크롬', '스윙 브라우저']

브라우저.pop()
print(브라우저)

브라우저.pop(0)
print(브라우저)

>>> ['인터넷 익스플로러', '파이어폭스', '구글 크롬']
>>> ['파이어폭스', '구글 크롬']

 

[ 리스트 요소 제거 = 리스트명.pop(인덱스) ]

리스트의 요소를 제거하고 싶을땐 pop이란 것을 사용합니다.

인덱스의 지정없이 사용하면 리스트의 맨뒤의 아이템 항목이 제거됩니다.

 

압축프로그램 = ['7zip', '알집', '반디집']

if '반디집' in 압축프로그램:
        print('있다')
else:
        print('없다')

리스트 안에 아이템 포함여부를 보고싶으면
if 항목 in 리스트 를 사용합니다.

 

아까 생선가게 예제에서 사용한 것 입니다.

 

브라우저 = ['인터넷 익스플로러', '파이어폭스', '구글 크롬', '스윙 브라우저']

브라우저 = 브라우저 * 3
print(브라우저)

>>> ['인터넷 익스플로러', '파이어폭스', '구글 크롬', '스윙 브라우저', '인터넷 익스플로러', '파이어폭스', '구글 크롬', '스윙 브라우저', '인터넷 익스플로러', '파이어폭스', '구글 크롬', '스윙 브라우저']

리스트의 경우에도 문자열 처럼 곱하기 연산자를 그대로 적용 가능한데 리스트에 숫자를 곱해주면 그 리스트 요소를 숫자 만큼 복사할 수 있습니다.

 

브라우저 = 브라우저 * 3 의 경우 오른쪽의 브라우저 라는 리스트를 브라우저 * 3에 의해 3배로 복제해서 그 값을 브라우저에 저장하라는 의미입니다.

 

소수 = [853, 47, 709, 419, 499, 311, 907, 449, 19, 821, 863, 397, 1117, 563, 937, 1217, 347, 1087, 727, 197, 401, 421, 1019, 947, 409, 1021, 971, 811, 857, 769, 173, 1171, 691, 751, 193,
953, 733, 367, 293, 233, 41, 683, 359, 59, 521, 271, 983, 1103, 1009, 3, 467, 787, 1063, 263, 389, 587, 353, 149, 571, 463, 859, 461, 1091, 107, 761, 37, 607, 241, 163, 827, 79, 223, 199, 313, 113, 487, 1223, 1193, 269, 71, 503, 317, 433, 743, 179, 643, 997, 229, 281, 757, 1039, 443, 701, 157, 491, 61, 829, 1181, 839, 181, 881, 593, 131, 139, 541, 647, 1187, 1163, 457, 599, 53, 17, 7, 523, 653, 29, 1097, 809, 739, 1109, 13, 677, 109, 601, 277, 883, 577, 283, 257, 439, 1051, 73, 1093, 941, 83, 929, 167, 967, 1213, 557, 379, 373, 431, 251, 1049, 1201, 337, 227, 31, 67, 1123, 991, 211, 613, 383, 1033, 719, 823, 547, 1031, 89, 1069, 127, 2, 887, 773, 631, 919, 1129, 911, 1153, 239, 797, 877, 977, 617, 673, 661, 1151, 1013, 307, 619, 43, 151, 23, 331, 97, 659, 349, 101, 1061, 641, 509, 479, 191, 569, 11, 103, 137, 5]

print(소수)

다음은 많은 소수가 저장되어 있는 리스트입니다.

그런데 내용이 너무 난잡하군요. 좀 깔끔하게 정렬해서 출력할 수 없을까요?

 

소수 = [853, 47, 709, 419, 499, 311, 907, 449, 19, 821, 863, 397, 1117, 563, 937, 1217, 347, 1087, 727, 197, 401, 421, 1019, 947, 409, 1021, 971, 811, 857, 769, 173, 1171, 691, 751, 193,
953, 733, 367, 293, 233, 41, 683, 359, 59, 521, 271, 983, 1103, 1009, 3, 467, 787, 1063, 263, 389, 587, 353, 149, 571, 463, 859, 461, 1091, 107, 761, 37, 607, 241, 163, 827, 79, 223, 199, 313, 113, 487, 1223, 1193, 269, 71, 503, 317, 433, 743, 179, 643, 997, 229, 281, 757, 1039, 443, 701, 157, 491, 61, 829, 1181, 839, 181, 881, 593, 131, 139, 541, 647, 1187, 1163, 457, 599, 53, 17, 7, 523, 653, 29, 1097, 809, 739, 1109, 13, 677, 109, 601, 277, 883, 577, 283, 257, 439, 1051, 73, 1093, 941, 83, 929, 167, 967, 1213, 557, 379, 373, 431, 251, 1049, 1201, 337, 227, 31, 67, 1123, 991, 211, 613, 383, 1033, 719, 823, 547, 1031, 89, 1069, 127, 2, 887, 773, 631, 919, 1129, 911, 1153, 239, 797, 877, 977, 617, 673, 661, 1151, 1013, 307, 619, 43, 151, 23, 331, 97, 659, 349, 101, 1061, 641, 509, 479, 191, 569, 11, 103, 137, 5]
소수.sort()

print(소수)

>>> [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063, 1069, 1087, 1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223]

 

리스트를 정렬할땐 sort를 사용합니다.
깔끔하게 정리가 되었군요!



리스트 삭제시 2가지 방법이 있습니다.

1. del 리스트명[인덱스] 
2. 리스트명.remove('항목') <- 이건 항목이 없으면 오류가 발생합니다.

리스트 추가시 

리스트명.append('항목')

를 이용합니다.

리스트 수정시 

리스트명[인덱스] = 원하는값

을 이용합니다.

​이를 이용하여 간단한 데이터 관리 프로그램을 만들어 보겠습니다.

 

l = []
prompt = input('Hello What Should I Do? : ')
if prompt != '': #공백이 아닐시
    while(prompt != 'stop'): #Stop이 아닐때까지 무한반복
        if prompt == 'add':
            m = input('Please let me know which items to add : ')
            l.append(m) #리스트 추가
            print(l)
        elif prompt == 'del':
            m = input('Please let me know which item to remove : ')
            l.remove(m)
            print(l)
        prompt = input('Hello What Should I Do? : ') #다시물어봄(안물어보면 위 m에서 빠져나올수없기때문)
    print('Finish') #Stop 입력시 빠져나옴 
    print(l)

else: #공백입력시
    print('Oh. I think you miss something important')

-------------------------------------------------------------
Hello What Should I Do? : add
Please let me know which items to add : Python
['Python']
Hello What Should I Do? : add
Please let me know which items to add : is
['Python', 'is']
Hello What Should I Do? : add
Please let me know which items to add : Easy
['Python', 'is', 'Easy']
Hello What Should I Do? : del
Please let me know which item to remove : Easy
['Python', 'is']
Hello What Should I Do? : add
Please let me know which items to add : Hard
['Python', 'is', 'Hard']

음 내용이 좀 기네요..

아래 부분의 경우 제가 입력해서 어떻게 출력되나 보여주려고 넣은 부분이구요.

간단히 설명을 하자면 처음에 입력할 명령어를 받고 (추가/제거) 거기서 받은 명령어에 따라 리스트의 항목들을 추가/제거 하여 관리하는 프로그램입니다.

여기서 사용된  while(prompt != 'stop'):  부분은 입력받는(Input)부분에서 
stop이 나오기 전까지 무한반복 한다는 겁니다. 이건 반복문중 하나인데 
이건 바로 다음 강좌에서 다룹니다.

 

당장 이해가 되지 않으시면 이 부분은 Skip 하셔도 좋습니다.

그냥 앞으로 내가 이렇게 긴 코드를 작성할 수 있겠구나..! 기대를 가지고 넘어가시면 되겠습니다.

SNS 공유하기
💬 댓글 개
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

이모티콘을 클릭하면 댓글창에 입력됩니다.