250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- decode()
- View
- MySQL
- count()
- locals()
- HTML
- 오버라이딩
- remove()
- inplace()
- Database
- __annotations__
- __sub__
- shuffle()
- mro()
- 파이썬
- shutil
- discard()
- __len__
- fileinput
- glob
- __getitem__
- MySqlDB
- node.js
- fnmatch
- zipfile
- JS
- randrange()
- choice()
- CSS
- items()
Archives
- Today
- Total
흰둥이는 코드를 짤 때 짖어 (왈!왈!왈!왈!왈!왈!왈!왈!왈!왈!왈!)
(파이썬) 리스트 본문
728x90
반응형
1. 자료구조(Data Structure)
- 코드상에서 데이터를 효율적으로 처리하기 위해 데이터 특징에 따라 체계적으로 구조화하여 저장
2. 리스트(list)
- 여러가지 데이터 및 데이터타입을 콤마로 구분하여 대괄호로 감싼 자료구조
In [ ]:
a = 10 # 스칼라: 데이터 하나만 들어간 경우
print(a)
10
In [ ]:
li1 = [1, 3, 5, 7, 9]
print(li1)
print(type(li1))
[1, 3, 5, 7, 9]
<class 'list'>
In [ ]:
li2 = list([1, 3, 5, 7, 9])
print(li2)
[1, 3, 5, 7, 9]
In [ ]:
li3 = ['김사과', '반하나', '오렌지', '이메론']
print(li3)
['김사과', '반하나', '오렌지', '이메론']
In [ ]:
li4 = [1, 50.5, '김사과', True] # 각자 타입이 다른 데이터를 저장
print(li4)
[1, 50.5, '김사과', True]
In [ ]:
li5 = [1, 2, '파이썬', ['김사과', '오렌지']]
print(li5)
[1, 2, '파이썬', ['김사과', '오렌지']]
- 2차원 배열이 가능하다.
3. 리스트 인덱싱
In [ ]:
li1 = [1, 3, 5, 7, 9]
print(li1)
print(li1[0])
print(li1[-1])
print(li1[0] + li1[-1])
[1, 3, 5, 7, 9]
1
9
10
- 인덱스가 -1인 경우는 가장 끝에 있는 값을 뜻한다.
In [ ]:
li2 = ['김사과', '오렌지', '반하나', ['🍕', '🍔', '🥓', '🥨']]
print(li2[0])
print(li2[-1])
print(li2[-1][-2])
김사과
['🍕', '🍔', '🥓', '🥨']
🥓
- 2차원 배열안에 있는 데이터를 가져올 때는 위와 같이 인덱스 값을 두번 적어준다.
In [ ]:
li3 = [1, 2, 3, ['김사과', '오렌지', '반하나', ['🍕', '🍔', '🥓', '🥨']]]
print(li3[2])
print(li3[-2])
print(li3[-1])
print(li3[-1][-2])
print(li3[-1][-1][-1])
3
3
['김사과', '오렌지', '반하나', ['🍕', '🍔', '🥓', '🥨']]
반하나
🥨
- 3차원 배열도 가능하며 데이터를 불러 올때는 인덱스 값을 세번 적어준다.
4. 리스트 슬라이싱
In [ ]:
li4 = [10, 20, 30, 40, 50]
print(li4)
print(li4[0:3])
[10, 20, 30, 40, 50]
[10, 20, 30]
In [ ]:
li5 = li4
print(li5)
li5[0] = 100
print(li5)
print(li4)
[10, 20, 30, 40, 50]
[100, 20, 30, 40, 50]
[100, 20, 30, 40, 50]
- li5 와 li4는 같은 주소에 있는 데이터를 불러오기 때문에 li5만 수정을 하여도 li4도 함께 수정한 값을 불러오는 것을 위와 같이 확인 할 수 있다.
In [ ]:
li6 = [10, 20, 30, ['김사과', '오렌지', '반하나'], 40, ['🍕', '🍔']]
print(li6[2:6])
print(li6[5][:1])
[30, ['김사과', '오렌지', '반하나'], 40, ['🍕', '🍔']]
['🍕']
5. 리스트 연산자
In [ ]:
li7 = [10, 20, 30]
li8 = [40, 50, 60]
print(li7 + li8) # 리스트 연결 연산 [10, 20, 30, 40, 50, 60]
print(li8 + li7) # 리스트 연결 연산 [40, 50, 60, 10, 20, 30]
print(li7 - li8) # TypeError: unsupported operand type(s) for -: 'list' and 'list'
[10, 20, 30, 40, 50, 60]
[40, 50, 60, 10, 20, 30]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-34-7e3aa0db7067> in <module>
5 print(li8 + li7) # 리스트 연결 연산 [40, 50, 60, 10, 20, 30]
6
----> 7 print(li7 - li8) # TypeError: unsupported operand type(s) for -: 'list' and 'list'
TypeError: unsupported operand type(s) for -: 'list' and 'list'
- 리스트는 연결 연산이기 때문에 덧셈을 제외한 사칙연산은 불가능하다.
In [ ]:
print(li7 * 3) # 반복 [10, 20, 30, 10, 20, 30, 10, 20, 30]
[10, 20, 30, 10, 20, 30, 10, 20, 30]
- 예외로 곱셈은 리스트와 정수를 곱할시 리스트를 반복하는걸로 처리가 가능하다.
In [ ]:
li9 = [10, 20, 30]
print(li9[0] + li9[2])
li9[1] = '😎'
print(li9[0] + li9[1]) # TypeError: unsupported operand type(s) for +: 'int' and 'str'
40
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-36-0b12962bab08> in <module>
2 print(li9[0] + li9[2])
3 li9[1] = '😎'
----> 4 print(li9[0] + li9[1])
TypeError: unsupported operand type(s) for +: 'int' and 'str'
- 리스트 안에 데이터를 가져와 연산을 할 경우 당연히 타입이 다를 경우 에러가 발생한다.
6. 리스트의 수정 및 삭제
In [ ]:
li10 = [10, 20, 30]
li10[1] = 100
print(li10)
[10, 100, 30]
In [ ]:
# 슬라이싱을 이용하여 리스트 데이터를 추가한 경우 리스트에 데이터만 포함
li10[1:2] = ['😎', '😍', '😂']
print(li10)
[10, '😎', '😍', '😂', 30]
In [ ]:
li10 = [10, 20, 30]
In [ ]:
# 인덱싱을 이용하여 리스트 데이터를 추가한 경우 리스트 안에 리스트를 포함
li10[1] = ['😎', '😍', '😂']
print(li10)
[10, ['😎', '😍', '😂'], 30]
In [ ]:
print(li10[1:3])
[['😎', '😍', '😂'], 30]
In [ ]:
li10[1:3] = [] # 빈 리스트를 저장하면 요소가 삭제됨
print(li10)
[10]
In [ ]:
del li10[0] # 인덱스 0번 요소 삭제
print(li10)
[]
7. 리스트 함수
In [ ]:
li11 = [10, 20, 30]
# append(): 리스트의 요소 맨 마지막 자리에 데이터를 추가
print(li1)
li11.append(100)
print(li11)
li11.append([200, 300])
print(li11)
[10, 20, 30]
[10, 20, 30, 100]
[10, 20, 30, 100, [200, 300]]
In [ ]:
# extend(): 리스트에 요소를 추가
print(li11)
li11.extend([50])
print(li11)
li11.extend([1000, 2000])
print(li11)
[10, 20, 30, 100, [200, 300]]
[10, 20, 30, 100, [200, 300], 50]
[10, 20, 30, 100, [200, 300], 50, 1000, 2000]
In [ ]:
# inplace 연산
li11 = [10, 20, 30]
li11 = li11 + [40, 50] # li11 += [40, 50]
print(li11)
[10, 20, 30, 40, 50]
- inplace 연산이란 변수가 데이터를 연산한 이후 변수가 연산 이후값으로 저장되는 것이다.
In [ ]:
li12 = [10, 20, 30, 40, 50]
# pop(): 리스트에 맨 마지막에 저장된 데이터를 반환하고 해당 데이터는 삭제
print(li12)
print(li12.pop())
print(li12)
temp = li12.pop()
print(temp)
print(li12)
[10, 20, 30, 40, 50]
50
[10, 20, 30, 40]
40
[10, 20, 30]
In [ ]:
li13 = [10, 20, 30, 40, 50, 20, 40]
# remove(): 매개변수로 전달된 데이터를 제거, 같은 데이터가 여러개 있는 경우 처음 출현하는 데이터만 제거
print(li13)
li13.remove(20)
print(li13)
li13.remove(20)
print(li13)
li13.remove(20) # 지우려는 데이터가 없다면 에러!. ValueError: list.remove(x): x not in list
print(li13)
[10, 20, 30, 40, 50, 20, 40]
[10, 30, 40, 50, 20, 40]
[10, 30, 40, 50, 40]
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-62-4795afda57f8> in <module>
10 print(li13)
11
---> 12 li13.remove(20)
13 print(li13)
ValueError: list.remove(x): x not in list
In [ ]:
li14 = [10, 20, 30]
# insert(): 리스트의 특정 위치(인덱스)에 데이터를 삽입
li14.insert(1, 100) # 인덱스 1번 의치에 100을 삽입
print(li14)
[10, 100, 20, 30]
In [ ]:
print(li14)
# index(): 리스트에 저장된 데이터가 있을 경우 위치를 인덱스로 반환. 없으면 에러!
print(li14.index(100))
print(li14.index(50)) # ValueError: 50 is not in list
[10, 100, 20, 30]
1
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-64-d545d036be13> in <module>
3 # index(): 리스트에 저장된 데이터가 있을 경우 위치를 인덱스로 반환. 없으면 에러!
4 print(li14.index(100))
----> 5 print(li14.index(50)) #
ValueError: 50 is not in list
In [ ]:
li15 = [100, 50, 70, 60, 20]
# reverse(): 리스트에 저장된 데이터를 반대 순서로 반환
li15.reverse()
print(li15)
li16 = ['김사과', '오렌지', '반하나', '이메론']
li16.reverse()
print(li16)
[20, 60, 70, 50, 100]
['이메론', '반하나', '오렌지', '김사과']
In [ ]:
li17 = [10, 40, 30, 100, 90, 50]
# sort(): 리스트에 저장된 데이터를 오름차순 또는 내림차순으로 정렬
li17.sort() # 오름차순
print(li17)
# sort(reverse=True) # 내림차순
li17.sort(reverse=True)
print(li17)
li18 = ['Apple', 'apple', 'orange', 'banana', 'melon']
li18.sort()
print(li18)
li19 = ['김사과', '오렌지', '반하나', '이메론', '배애리']
li19.sort()
print(li19)
[10, 30, 40, 50, 90, 100]
[100, 90, 50, 40, 30, 10]
['Apple', 'apple', 'banana', 'melon', 'orange']
['김사과', '반하나', '배애리', '오렌지', '이메론']
In [ ]:
# ✅ 비교
# sorted(): 이터러블 객체로부터 정렬된 리스트를 생성함. inplace 연산을 수행하지 않음음
li17 = [10, 40, 30, 100, 90, 50]
print(sorted(li17)) # 오름차순
print(sorted(li17, reverse=True)) # 내림차순
li18 = ['Apple', 'apple', 'orange', 'banana', 'melon']
print(sorted(li18))
print(sorted(li18, reverse=True))
[10, 30, 40, 50, 90, 100]
[100, 90, 50, 40, 30, 10]
['Apple', 'apple', 'banana', 'melon', 'orange']
['orange', 'melon', 'banana', 'apple', 'Apple']
In [ ]:
li17 = sorted(li17) # 값을 유지하려면 다시 저장해야함
print(li17)
[10, 30, 40, 50, 90, 100]
In [ ]:
li18 = [10, 20, 30, 50, 20, 40, 30, 20]
# count(): 리스트에 포함된 특정 데이터의 갯수를 반환
print(li18.count(20))
print(li18.count(16))
3
0
In [ ]:
# ✅ 추가
# len(): 요소의 갯수를 반환
print(len(li18))
8
728x90
반응형
'파이썬 기초' 카테고리의 다른 글
(파이썬) 조건문 및 연산자 (0) | 2023.03.07 |
---|---|
(파이썬) 튜플 (0) | 2023.03.07 |
(파이썬) 문자열 함수 (0) | 2023.03.06 |
(파이썬) input(), split(), int() (0) | 2023.03.06 |
(파이썬) 변수 (0) | 2023.03.06 |