본문 바로가기
Python/개념

Day 3-1. 컬렉션 타입 - 리스트

by 사라리24 2024. 3. 13.
SMALL

1. 컬렉션 타입

여러 개의 데이터 항목을 하나의 단위로 관리할 수 있게 해주는 데이터 구조를 의미합니다. 이것은 여러 개의 데이터를 하나의 변수에 저장하고, 관리할 수 있게 해줍니다. 파이썬에서는 리스트, 튜플, 세트, 딕셔너리 등이 기본적인 컬렉션 타입에 속합니다.

컬렉션 생성함수 특징 예시
리스트 list() 추가, 수정, 삭제 언제나 가능 a = [1,2,3]
튜플 tuple() 생성되고 나면 변경 불가능 a =(1,2,3)
세트 set() 중복된 값의 저장 불가능 a ={1,2,3}
딕셔너리 dict() 키 + 값으로 관리 a ={'age':25}

 

2. 리스트

리스트란 무엇일까요? 사전적 의미는 '목록'이며, 파이썬에서는 자료를 저장할 수 있는 자료입니다. 숫자, 문자, 수식 등 개별적인 자료들을 리스트에서는 모아서 사용할 수 있습니다. 

 

리스트를 생성하는 방법은 대괄호[]에 자료를 쉼표로 구분해서 입력합니다. 대괄호[ ] 내부에 넣는 자료는 요소(element)입니다.

li = [요소, 요소, 요소]

 

 
  li1 = [1,3,5,7,9]
  print(li1)
  print(type(li1))

  li2 = ['김사과', '반하나','오렌지','이메론']
  print(li2)

  li3 = [1, 50.5, '김사과', True]
  print(li3)
 
[1, 3, 5, 7, 9]
<class 'list'>
['김사과', '반하나', '오렌지', '이메론']
[1, 50.5, '김사과', True]
    • 다른 언어 배열 특징 (C,C++, Java)

      1. 데이터 타입 지정
      2. 크기를 지정
      3. index 순차적으로 저장
      4. 데이터를 자주 이사시켜야 함
      - > 불편함을 해소하기 위해 새로 list가 만들어짐

    • 파이썬 list 특징

      1. 다양한 형들을 묶을 수 있다
      2. 데이터 크기를 유동적으로 추가하고 삭제할 수 있음 (공간 낭비가 적다)
      3. 빈 index가 존재
      4. 데이터가 이사할 필요가 없음

∨∨∨ 함수에 담아서 리스트를 만드는 방식∨∨∨

 
  li4 = list([1,3,5,7,9])
  print(li4)
  print(type(li4))
 
[1, 3, 5, 7, 9]
<class 'list'>


-> 나중에 담는 그릇을 바꾸기 위해서 함수에 담기도 합니다.

예) List로 담아진 자료구조 -> Set으로 담아진 자료구조

 

 


1. 인덱싱


- 리스트의 각 항목은 위치(인덱스)를 가지고 있으며, 인덱스를 사용하여 접근할 수 있습니다. 인덱스는 0부터 시작합니다.
- 리스트의 타입과 리스트 데이터의 타입은 다를 수 있습니다.

 
  li4 = [1,3,5,7,9]
  print(li4[0])
  print(type(li4[0]))
  print(type(li4[1]))
  print(type(li4[2]))
  print(type(li4[3]))
 
1
<class 'int'>
<class 'float'>
<class 'str'>
<class 'bool'>
 
  li1 = [1,3,5,7,9]
  print(li1)
  print(li1[0])
  print(li1[-1])
  print(li1[0]+li1[-2])
 
[1, 3, 5, 7, 9]

9
8

 

 


2. 리스트 안에 리스트

 

 
  li2 = [1, 2, '파이썬', ['김사과', '오렌지']]
  print(li2)
  print(type(li2))
  print(li2[0])
  print(type(li2[0]))
  print(li2[3])
  print(type(li2[3]))
  print(li2[3][0])
  print(type(li2[3][0]))
 
[1, 2, '파이썬', ['김사과', '오렌지']]
<class 'list'>
1
<class 'int'>
['김사과', '오렌지']
<class 'list'>
김사과
<class 'str'>
 
  li3 = [1, 2, 3, ['김사과', '오렌지', '반하나',['🍕','🍟','🌭','🍔']]]
  print(li3[2])
  print(li3[-1])
  print(li3[-1][-2])
  print(li3[-1][-1][-1])
 
3
['김사과', '오렌지', '반하나', ['🍕', '🍟', '🌭', '🍔']]
반하나
🍔

 

 


3. 슬라이싱
 
  li1 = [10, 20, 30, 40, 50]
  print(li1)
  print(li1[0:3])
 
[10, 20, 30, 40, 50]
[10, 20, 30]

  li3 =
[10, 20, 30, ['김사과', '오렌지', '반하나'],40,['🍕','🍟']]
  print(li3[2:6])
  print(li3[5][:1])

[30, ['김사과', '오렌지', '반하나'], 40, ['🍕', '🍟']]
['🍕']

 

 


4. 변경
 
  li2 = li1
  print(li2)
  li2[0] = 100
  print(li2)
  print(li1)
 

 

[100, 20, 30, 40, 50]
[100, 20, 30, 40, 50]
[100, 20, 30, 40, 50]

 


5. 추가

 
  li4 = [ 10, 20, 30, 40, 50]
  li4[1:2] = ['😀','😊','😍']
  print(li4)
  # 슬라이싱을 이용하여 요소를 추가한 경우 리스트에 데이터만 포함
 (차원이 유지)
 

 

[10, '😀', '😊', '😍', 30, 40, 50]

 

 
  li4 = [ 10, 20, 30, 40, 50]
  li4[1] = ['😀','😊','😍']
  print(li4)
  # 인덱싱을 이용하여 요소를 추가한 경우 리스트 안에 리스트를 만들고 포함
   (차원이 늘어난다 = 리스트가 겹겹히 생긴다)
 
[10, ['😀', '😊', '😍'], 30, 40, 50]

 


 


6. 삭제

 
  li5 = [100, 20, 30, 40, 50]
  print(li5[1:3])
  # 빈 리스트를 저장하면 해당 요소가 삭제됨
  li5[1:3] = [ ]
  print(li5)
 
[20, 30]
[100, 40, 50]

 

 
  li5 = [100, 20, 30, 40, 50]
  print(li5)
  del li5[2]
  print(li5)
 

 

[100, 20, 30, 40, 50]
[100, 20, 40, 50]

 

 

 


7. 결합

  li6 = 
[10, 20, 30]
  li7 = [40, 50, 60]
  print(li6 + li7)
  print(li7 + li6)
  #결합된 순서에 맞게 인덱싱이 된다.

[10, 20, 30, 40, 50, 60]
[40, 50, 60, 10, 20, 30]

 

 
 li6 = [10, 20, 30]
 li6 = li6 + [100, 200]
 print(li6)

 li6 = [10, 20, 30]
 li6 += [100, 200] 
 li6 = li6 + [100, 200]
 print(li6)
 
[10, 20, 30, 100, 200]
[10, 20, 30, 100, 200, 100, 200]

 

  li6 = [10, 20, 30]
  print(li6[0]+li6[2])
  li6[1] = '😎'
  print(li6)
  print(li6[0] + li6[1])  #문자열과 정수형은 더할 수 없다.
 
40
[10, '😎', 30]

 

 


8. 반복

  li6 = [10, 20, 30]
  print(li6 *3)
 
[10, 20, 30, 10, 20, 30, 10, 20, 30]

 

 


9. 함수와 메서드

 

 
  #len() : 객체의 길이를 반환하는 파이썬 내장함수
  #          : 다양한 객체에 사용가능

  li6 = [10, 20, 30]
  print(len(li6))
 
3
 
  #append() : 리스트에 사용되며, 리스트 끝에 새로운 요소를 추가 
 
  li6 = [10, 20, 30]
  print(li6)
 
  li6.append(100)
  print(li6)
  li6.append([200, 300])
  print(li6)

[10, 20, 30]
[10, 20, 30, 100]
[10, 20, 30, 100, [200, 300]]
 
  #extend() : 리스트에 여러 요소를 추가
 
  li6 = [10, 20, 30]
  print(li6)
 
  li6.extend([50])
  print(li6)
  li6.extend([100, 200, 300])
  print(li6)
  # 단일형식이여도 리스트형식으로 넣어야 함
  # 순차적으로 들어갔다! interable
 
[10, 20, 30]
[10, 20, 30, 50]
[10, 20, 30, 50, 100, 200, 300]
 
  #pop(): 리스트 마지막 요소를 삭제하고 삭제된 요소를 반환

  li6 = [10, 20, 30]
  print(li6)
 
  print(li6.pop())
  print(li6)
 
[10, 20, 30]
30
[10, 20]
 
  li6 = [10, 20, 30]
  print(li6)
 
  temp = li6.pop()
  print(temp)
  # 요소에 넣어서 출력할 수도 있음
 
[10, 20, 30]
[10, 20]
30
 
  # insert() : 리스트의 특정 인덱스에 요소를 한개만 추가
 
  li6 = [10, 20, 30]
  print(li6)
 
  li6.insert(1,100)
  print(li6)
  li6.insert(2,[1000,2000])
  print(li6)
 
[10, 20, 30]
[10, 100, 20, 30]
[10, 100, [1000, 2000], 20, 30]
 
  # index() : 리스트에서 특정 값의 인덱스를 반환
 
  li6 = [10, 20, 30]
  print(li6)
 
  print(li6.index(20))
  # 없으면 에러발생
 
[10, 20, 30]
1
 
  # reverse() : 리스트의 요소들이 순서를 반대로 변경
 
  li7 = [100, 50, 70, 60, 20]
  print(li7)
 
  li7.reverse()
  print(li7)
 
[100, 50, 70, 60, 20]
[20, 60, 70, 50, 100]
 
  # 슬라이싱을 사용해 리스트의 순서를 뒤집는 방법
  # 슬라이싱 [start:stop:]
  # 슬라이싱 [start:stop:step:]
  # start를 생략하면 -1로 간주
  # stop을 생략하면 0으로 간주

  li7 = [100, 50, 70, 60, 20]
  print(li7)
  print(li7[::-1])
  #stop이 -1이므로, 앞으로 하나씩 슬라이싱
 
[100, 50, 70, 60, 20]
[20, 60, 70, 50, 100]
 
  #sort() : 리스트의 요소를 정렬
  li7 = [100, 50, 70, 60, 20]
  print(li7)
  li7.sort() #오름차순
  print(li7)
 
[100, 50, 70, 60, 20]
[20, 50, 60, 70, 100]
 
  li7 = [100, 50, 70, 60, 20]
  print(li7)
  li7.sort(reverse=True) #내림차순
  print(li7)
 
[100, 50, 70, 60, 20]
[100, 70, 60, 50, 20]
 
  # 문자열도 가능
  # 아스키코드로 정렬
  li8 = ['Apple','apple','orange','banna']
  li8.sort()
  print(li8)
 
['Apple', 'apple', 'banna', 'orange']
 
  # 문자열도 가능
  # 유니코드로 정렬
  li9 = ['김사과','오렌지','반하나','이메론','배애리']
  li9.sort()
  print(li9)
 
 
 
  #sorted() : 모든 요소를 정렬한 후 반환해주는 함수
  li7 = [100, 50, 70, 60, 20]
  print(li7)

  print(sorted(li7)) #오름차순
  print(li7)  #원상태로 복귀, sorted할 때만 변환 implaced되지 않음!

  result = sorted(li7)
  print(result) #변수에 넣으면 완전히 바뀜
'
[100, 50, 70, 60, 20]
[20, 50, 60, 70, 100]
[100, 50, 70, 60, 20]
[20, 50, 60, 70, 100]
 
  li7 = [100, 50, 70, 60, 20]
  print(li7)
  result = sorted(li7, reverse=True) #내림차순
  print(result)
 
[100, 50, 70, 60, 20]
[100, 70, 60, 50, 20]
 
  # count() : 리스트에서 특정 요소의 갯수를 반환

  li10 = [10, 20, 30, 50, 20, 40, 30, 20]
  print(li10.count(20))
  print(li10.count(100))
 
3
0












 

'Python > 개념' 카테고리의 다른 글

Day 4-1. 컬렉션 타입 - 세트  (0) 2024.03.14
Day 3-2. 컬렉션 타입 - 튜플  (0) 2024.03.13
Day 2-4. 과제  (0) 2024.03.12
Day 2-3. 문자열 다루기  (0) 2024.03.12
Day 2-2. 변수  (0) 2024.03.12