1. 리스트(List)

  • [ ] 로 표현한다.
  • 각 요소에 다양한 자료형을 넣을 수 있다.
    숫자, 문자, 리스트, 튜플, 딕셔너리, 참/거짓, None 모두 가능
  • list(a): a를 리스트로 변환한다.
  • 추가, 수정, 삭제가 가능하다.
  • 리스트 안에 리스트를 계속해서 넣을 수 있는데 이를 $n$차원 리스트라고 한다.
    n차원 리스트 예제
      # 1차원 리스트 
      lst = [1, 2, 3]
    
      print(lst)
    
      # 2차원 리스트 
      lst = [[1, 2, 3],
          [4, 5, 6]]
    
      print(lst)
    
      # 3차원 리스트 
      lst = [[[1, 2, 3], 
              [4, 5, 6]],
            
          [[7, 8, 9],
              [10, 11, 12]],
            
          [[13, 14, 15],
              [16, 17, 18]]]
    
      print(lst)
    
      [1, 2, 3]
      [[1, 2, 3], [4, 5, 6]]
      [[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]], [[13, 14, 15], [16, 17, 18]]]
    

2. 튜플(Tuple)

  • ( ) 로 표현한다.
  • 각 요소에 다양한 자료형을 넣을 수 있다.
    숫자, 문자, 리스트, 튜플, 딕셔너리, 참/거짓, None 모두 가능
  • tuple(a): a를 튜플로 변환한다.
  • 추가, 수정, 삭제가 불가능하다.
  • 요소가 하나인 튜플 만들기, `,`가 필요하다
      print((2), type((2)))
      print((2,),type((2,)))
    
      2 <class 'int'>
      (2,) <class 'tuple'>
    
# 리스트(list)
a = [100, '커피', False, (1, 2, 3)]
print(a, '> type:', type(a))

# 튜플(tuple)
b = (100, '커피', False, [1, 2, 3])
print(b, '> type:', type(b))
[100, '커피', False, (1, 2, 3)] > type: <class 'list'>
(100, '커피', False, [1, 2, 3]) > type: <class 'tuple'>

3. 인덱싱(Indexing) / 슬라이싱(Slicing)

  • 문자열의 인덱싱 슬라이싱과 같다.
a = [100, '커피', False, (1, 2, 3)]
b = (100, '커피', False, [1, 2, 3])

# 리스트 
print(a[0])                 # a의 0위치 요소 출력 
print(a[-1][1])             # a의 마지막 요소에서 1위치 요소 출력
print(a[2:])                # a의 2위치부터 끝까지 출력 
print(a[::-1])              # a를 거꾸로 출력

print('-'*50)

# 튜플
print(b[2])                 # b의 2위치 요소 출력 
print(b[1][1])              # b의 1위치 요소에서 1위치 요소 출력
print(b[:2])                # b의 처음부터 1위치까지 출력
print(a[::-1])              # b를 거꾸로 출력

100
2
[False, (1, 2, 3)]
[(1, 2, 3), False, '커피', 100]
--------------------------------------------------
False
피
(100, '커피')
[(1, 2, 3), False, '커피', 100]

4. 연산

  • 문자열의 연산과 같이 리스트 / 튜플의 연산은 연결과 반복을 의미한다.
# 리스트
a = [1, 2, 3]
b = ['A', 'B', 'C']

print('a + b:', a + b)
print('a * 2:', a * 2)

print('-'*50)

# 튜플
a = (1, 2, 3)
b = ('A', 'B', 'C')

print('a + b:', a + b)
print('a * 2:', a * 2)
a + b: [1, 2, 3, 'A', 'B', 'C']
a * 2: [1, 2, 3, 1, 2, 3]
--------------------------------------------------
a + b: (1, 2, 3, 'A', 'B', 'C')
a * 2: (1, 2, 3, 1, 2, 3)

5. 찾기

  • 문자열과 같지만, find함수는 지원하지 않는다.
함수 설명
a.index("요소") “요소”가 처음 나온 위치를 출력한다,
a안에 문자가 없으면 Error가 나타난다
a.count("요소") a안에 “요소”가 몇 번 나타나는지를 출력한다
# 리스트
a = [1, 3, 3, 2, 1]
b = ["이","삼","일","이","삼","이"]

print('a에서 요소 3 첫 위치:', a.index(3))
print('a에서 요소 3 개수:', a.count(3))
print('b에서 요소 "이" 첫 위치:', b.index('이'))
print('b에서 요소 "이" 개수:', b.count('이'))
print('b에서 요소 "오" 개수:', b.count('오'))

print('-'*50)

# 튜플
a = (1, 3, 3, 2, 1)
b = ("이","삼사","일","이","오")

print('a에서 요소 3 첫 위치:', a.index(3))
print('a에서 요소 3 개수:', a.count(3))
print('b에서 요소 "이" 첫 위치:', b.index('이'))
print('b에서 요소 "이" 개수:', b.count('이'))
print('b에서 요소 "오" 개수:', b.count('오'))
a에서 요소 3 첫 위치: 1
a에서 요소 3 개수: 2
b에서 요소 "이" 첫 위치: 0
b에서 요소 "이" 개수: 3
b에서 요소 "오" 개수: 0
--------------------------------------------------
a에서 요소 3 첫 위치: 1
a에서 요소 3 개수: 2
b에서 요소 "이" 첫 위치: 0
b에서 요소 "이" 개수: 2
b에서 요소 "오" 개수: 1

6. 변형 (list만 가능)

1) 추가

  • 함수를 print하면 ‘None’이다. 즉, a 자체가 바뀌는 것이다.

    코드 설명
    a.append(‘요소’) a의 마지막에 ‘요소’를 추가한다
    a.extend(‘리스트’) a에 ‘리스트’를 더한다
    a.insert(i,’요소’) a의 i 위치에 ‘요소’를 삽입한다
a = list(range(10))
print(a)

print(a.append(10))         # a의 마지막에 요소 10 추가(출력되지 않는다) 
print(a)

a.append([11, 12])          # a의 마지막에 요소 [11, 12] 추가
print(a)

a.extend([13, 14, 15])      # a의 마지막에 리스트 [13, 14, 15] 연결
print(a)

a.insert(4, 'insert')       # a의 4 위치에 'insert' 요소 삽입
print(a)        
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
None
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, [11, 12]]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, [11, 12], 13, 14, 15]
[0, 1, 2, 3, 'insert', 4, 5, 6, 7, 8, 9, 10, [11, 12], 13, 14, 15]

2) 수정

  • 함수를 print하면 ‘None’이다. 즉, a 자체가 바뀌는 것이다.

    코드 설명
    a.reverse() a의 순서를 거꾸로 만든다
a = list(range(5))
print(a)

a[2] = 'one'            # a의 2 위치를 'one'으로 수정
a[-1] = 'nine'          # a의 마지막을 'nine'으로 수정
print(a)

print('-'*50)

a.reverse()             # a를 거꾸로 출력
print(a)
print(a[::-1])          # 거꾸로 저장된 a를 다시 거꾸로 출력
print(a)                # 위의 코드는 a를 바꾸지 않는다. 
[0, 1, 2, 3, 4]
[0, 1, 'one', 3, 'nine']
--------------------------------------------------
['nine', 3, 'one', 1, 0]
[0, 1, 'one', 3, 'nine']
['nine', 3, 'one', 1, 0]

3) 정렬

  • 함수를 print하면 ‘None’이다. 즉, a 자체가 바뀌는 것이다.
  • 문자형과 숫자형이 함께 있으면 정렬되지 않는다.
  • 리스트가 같은 자료형일 때 정렬할 수 있다.
  • 문자형에서 정렬 순서는 ‘공백 > 숫자 > 영문 > 한글’이다.

    코드 설명
    a.sort() a를 오름차순으로 정렬한다
    a.sort(reverse=True) a를 내림차순으로 정렬한다
b = ['가나다라마', 'abcde', ' ', '1234']
b.sort()
print(b)
b.sort(reverse=True)
print(b)
[' ', '1234', 'abcde', '가나다라마']
['가나다라마', 'abcde', '1234', ' ']

3) 삭제

  • 함수를 print하면 ‘None’이다. 즉, a 자체가 바뀌는 것이다.
    (.pop() 제외!, .pop() 함수는 출력이 가능하다.)
  • 리스트의 위치를 벗어나거나 없는 요소를 제거하면 오류가 난다.

    코드 설명
    del a[i] a에서 i 위치을 삭제한다
    a.pop(i) a의 i 위치를 출력하고 삭제한다
    (공백이면 맨 마지막 요소를 삭제한다)
    a.remove(‘요소’) a에서 처음 나온 ‘요소’를 삭제한다
a = list(range(10))
print(a)

del a[5]                # a의 5 위치 요소 삭제(출력되지 않음)
print(a)

print(a.pop(3))         # a에서 3 위치 요소 삭제(출력됨)
print(a)

print(a.remove(7))      # a에서 요소 7 삭제
print(a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 6, 7, 8, 9]
3
[0, 1, 2, 4, 6, 7, 8, 9]
None
[0, 1, 2, 4, 6, 8, 9]

Reference

댓글남기기