KDT 수업/Python

[파이썬] 06. 리스트(list)

니니는 진짜 전설이다 2023. 3. 6. 17:48

1. 리스트(list)

  • 리스트 list[ ]
    : 여러가지 데이터 밒 여러 데이터 타입을 콤마로 구분하여 대괄호로 감싼 자료구조.
     * 자료구조(Data Structure): 코드상에서 데이터를 효율적으로 처리하기 위해 데이터 특징에 따라 체계적으로 구조화     하여 저장함
# 변수에 리스트 넣기
li1 = [1,3,5,7,9]
print(li1)
>> [1, 3, 5, 7, 9]

li2 = list([1,3,5,7,9])
print(li2)
>> [1, 3, 5, 7, 9]

# 숫자형 외에도 다양한 타입의 데이터를 저장 할 수 있다
li3 = ['김사과', '반하나', '오렌지', '이메론']
print(li3)
>> ['김사과', '반하나', '오렌지', '이메론']

# 각자 타입이 다른 데이터도 같은 리스트에 저장 가능하다
li4 = [1, 50.5, '김사과', True]  
print(li4)
>> [1, 50.5, '김사과', True]

# 리스트도 리스트 안에 넣을 수 있다
li5 = [1,2,'파이썬', ['김사과', '오렌지']]
print(li5)
>> [1,2,'파이썬', ['김사과', '오렌지']]

 

 

 

2. 리스트 인덱싱

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
li2 = ['김사과', '오렌지', '반하나', ['🍕', '🍔','🥓','🥨']]
print(li2[0])
print(li2[-1])
print(li2[-1][-2])
>>
김사과
['🍕', '🍔', '🥓', '🥨']
🥓
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. 리스트 슬라이싱

li5 = li4
print(li5)
li5[0] = 100
print(li5)
print(li4)    # 둘이 같은걸 가리키고 있어서 같이 바뀜
>>
[100, 20, 30, 40, 50]
[100, 20, 30, 40, 50]
[100, 20, 30, 40, 50]​
li6 = [10,20,30, ['김사과', '오렌지', '반하나'], 40, ['🍕', '🍔']]
print(li6[2:6])
print(li6[5][:1])
[30, ['김사과', '오렌지', '반하나'], 40, ['🍕', '🍔']]
['🍕']
li4 = [10,20,30,40,50]
print(li4)
print(li4[0:3])
>>
[10, 20, 30, 40, 50]
[10, 20, 30]

 

 

 

4. 리스트 연산자

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]

# 연결하는 것이라서 - 빼기나 * 곱하기 등은 안됨

[10, 20, 30, 40, 50, 60]
[40, 50, 60, 10, 20, 30]
print(li7 * 3)   # 일반 숫자는 곱하기가능 ==> 숫자만큼 리스트 반복
[10, 20, 30, 10, 20, 30, 10, 20, 30]​
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-37-d8d69575d5cf> 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'

 

 

5. 리스트의 수정 및 삭제

li10 = [10,20,30]
li10[1] = 100
print(li10)
>>[10, 100, 30]
# 슬라이싱을 이용하여 리스트 데이터를 추가한 경우 리스트에 데이터만 포함
li10[1:2] = ['😎','😍','😂']
print(li10)
>>[10, '😎', '😍', '😂', 30]
# 인덱싱을 이용하여 리스트 데이터를 추가한 경우 리스트 안에 리스트를 포함
li10 = [10,20,30]
li10[1] = ['😎','😍','😂']
print(li10)
>>[10, ['😎', '😍', '😂'], 30]
print(li10[1:3])
>>[['😎', '😍', '😂'], 30]
li10[1:3] = []   # 빈 리스트를 저장하면 그 자리의 요소가 삭제됨
print(li10)
>>[10]
del li10[0]  # 인덱스 0번 요소 삭제
print(li10)
>> []

 

 

6. 리스트 함수

li14 = [10,20,30]

# insert(): 리스트의 특정 위치(인덱스)에 데이터를 삽입
li14.insert(1,100)  # 인덱스 1번 위치에 100을 삽입
print(li14)
>>[10, 100, 20, 30]​
li11 = [10,20,30]

# append(): 리스트의 요소 맨 마지막 자리에 데이터를 추가
print(li11)
li11.append(100)
print(li11)

# append는 한번에 한 값씩만 넣을 수 있음. 한번에 여러개 불가!
li11.append([200,300])
print(li11)
>>
[10, 20, 30]
[10, 20, 30, 100]
[10, 20, 30, 100, [200, 300]]
# extend(): 리스트에 요소를 추가. 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]
# inplace 연산
li11 = [10,20,30]
li11 = li11 + [40,50]  # li11 += [40,50] 과 같음
print(li11)
>>[10, 20, 30, 40, 50]
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]
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]
print(li14)

# index(): 리스트에 저장된 데이터가 있을 경우 위치를 인덱스로 반환. 없으면 에러!
print(li14.index(100))
#print(li14.index(50))    # 없는걸 찾으면 에러 ValueError: 50 is not in list
>>
[10, 100, 20, 30]
1
li15 = [100, 50, 70, 60, 20]

# reverse(): 리스트에 저장된 데이터를 반대 순서로 반환
li15.reverse()
print(li15)

li16 = ['김사과', '오렌지', '반하나']
li16.reverse()
print(li16)
>>
[20, 60, 70, 50, 100]
['반하나', '오렌지', '김사과']
li17 = [10,40,30,100,90,50]

# sort(): 리스트에 저장된 데이터를 오름차순 또는 내림차순으로 정렬. inplace 연산을 수행 ==> 바뀐모양으로 저장됨
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']
['김사과', '반하나', '배애리', '오렌지', '이메론']
# 비교
# sorted(): 이터러블 객체로부터 정렬된 리스트를 생성함   (표준 파이썬 함수임)
li17 = [10,40,30,100,90,50]
print(sorted(li17)) #오름차순
print(sorted(li17, reverse=True))  #내림차순
print(li17)  # 리턴만 해주고 값이 실제로 바뀌어서 저장되진 않았음
>>
[10, 30, 40, 50, 90, 100]
[100, 90, 50, 40, 30, 10]
[10, 40, 30, 100, 90, 50]
li17 = sorted(li17)  # 값을 유지하려면 다시 저장해야함
print(li17)
>>[10, 30, 40, 50, 90, 100]
li18 = [10,20,30,50,20,40,30,20]

# count(): 리스트에 포함된 특정 데이터의 갯수를 반환
print(li18.count(20))
print(li18.count(16))
>>
3
0
# 추가
# len(): 요소의 갯수를 반환
print(len(li18))
>>8