본문 바로가기
SK 행복성장캠퍼스/Python 기초

0901_2일차_Python08_리스트_함수

by NickNuma 2020. 9. 5.

리스트에서 사용하는 함수에 대해 알아보는 시간입니다.


일단 리스트에서 사용하는 함수를 알아보고 싶다print(dir(list))를 쳐보시면 됩니다.

"""
    집합형 자료형
    1) 문자열
    2) 리스트
        a. 리스트 생성 방법
            (1) [] 직접 사용
            (2) list(집합형)

        b. 리스트 제공 함수
            ==> 함수 정보 확인 방법
                print(dir(list))

        c. 인덱싱 및 슬라이싱

        d. 리스트 특징
            - [] 표현
            - 순서 존재, 중복 허용
            - 값 변경 가능 ( mutable )

"""

print(dir(list))를 쳐보시면 이런 함수들이 출력됩니다.

print(dir(list))

"""
#사용 가능한 외부 패키지 함수들
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', 
'__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', 
'__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', 
'__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
 '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__',
 
 #사용 가능한 list 클래스 내의 함수들
 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 
 'remove', 'reverse', 'sort']
 """

 


리스트를 사용하면서 자주 사용되는 함수들을 추려보겠습니다.

1. 값을 추가하는 .append()는 사용하면 리스트의 맨 뒤에 값을 추가해줍니다.
변수명.append(value)

#1. 값 추가    append = 맨 뒤에 추가
m = [10, 20]
m.append(100)
m.append(90)
m.append([8, 7])

print("1: append:", m)      # 1: append: [10, 20, 100, 90, [8, 7]]

2. 값을 삽입하는 .insert()index값을 이용해 해당 자리에 value값을 삽입합니다.
변수명.insert(index, value)

#2. 값 삽입
m = [10, 20, 30, 40]
m.insert(0, 100)
print("2. insert:", m)      #2: insert: [100, 10, 20, 30, 40]

3. 값을 병합하는 .extend()는 반드시 value값이 집합형 데이터이어야 합니다.  
변수명.extend(집합형 데이터)

#3. 병합  병합하려는 데이터의 타입이 집합형으로 동일해야함
m = [10, 20]    # 집합형 데이터 타입
# m.extend(30)  **Error, 정수형 int는 기본형 데이터 타입을 갖음
m.extend([30])
m.extend([8,7,6])
m.extend("Hello")
m.extend((3,4,5))
m.extend([20, 50])
print("3. extend:", m)      #3: extend: [10, 20, 30, 8, 7, 6, 'H', 'e', 'l', 'l', 'o', 3, 4, 5, 20, 50]

4. value 값을 삭제하는 .pop()index를 부여하여 해당 위치의 value를 삭제할수도, index를 주지 않고 맨 마지막 value를 삭제할수도 있습니다.
변수명.pop(index)

#4. 특정값 삭제1 - pop (위치값)
m = [10, 20, 30, 30, 40]
m.pop()     # 맨 마지막 값이 삭제
print("4. pop():", m)           #4: pop(): [10, 20, 30, 30]
m.pop(1)    # 위치값 지정 삭제
print("5. pop(index):", m)      #5: pop(index): [10, 30, 30]

5. pop과 동일하게 value 값을 삭제하는 del은 살짝 다르게 작동합니다.
del 변수명[index] 으로 작동하며 pop과는 다르게 위치를 지정해야만합니다.

#5. 특정값 삭제2 - del 변수명 [위치값]
m = [10, 20, 30, 30, 40]
del m[1]
print("6. del 변수명(index):", m)  #6: del 변수명(index): [10, 30, 30, 40]

6. 3번째 value 값 삭제 함수입니다. .remove()는 위치값 참조가 아닌 실제값을 삭제합니다.
변수명.remove(value)

#6. 특정값 삭제3 - remove (실제값)
m = [10, 20, 30, 20, 30, 40]
m.remove(10)
print("7. remove(value):", m)               #7: remove(value): [20, 30, 20, 30, 40]
m.remove(30)    # 중복값은 앞 부터 삭제
print("8. remove(duplicated value):", m)    #8: remove(duplicated value): [20, 20, 30, 40]

7. 마지막 값 삭제 함수, .clear()리스트의 value를 한번에 모두 삭제해줍니다.

#7. 전체값 삭제
m = [10, 20, 30, 30, 40]
m.clear()
print("9. clear():", m)     #9: clear(): []

8. 리스트의 길이를 알려주는 len(변수명)
9. 특정 값의 포함 갯수를 알려주는 변수명.count(value)
10. 특정 값의 위치를 알려주는 변수명.index(value)
11. 특정 값을 포함하고 있는지 알려주는 value in 변수명, 멤버십 연산자까지, 모두 함께 보시겠습니다.

#8. etc
m = [10, 20, 30, 30, 40]
print("10. 리스트 길이:", len(m))                #10: 리스트 길이: 5
print("11. 특정 값의 포함 갯수:", m.count(30))    #11: 특정 값의 포함 갯수: 2
print("12. 특정 값의 위치 반환:", m.index(30))  #중복 값은 가장 앞의 위치를 반환 #12: 특정 값의 위치 반환: 2
print("12. 특정 값의 위치 반환:", m.index(40))    #12: 특정 값의 위치 반환: 4
print("13. 특정 값의 포함여부:", 20 in m)   # 멤버십 연산자   #13: 특정 값의 포함여부: True
print("13. 특정 값의 포함여부:", 50 in m)   # 멤버십 연산자   #13: 특정 값의 포함여부: False

12. 리스트를 뒤집어주는 함수, 변수명.reverse()
## 원본 list자료를 변경합니다. ===> list형mutable한 집합 자료형이기 때문에 가능한 일입니다.

#9. 거꾸로 처리 1    ==> 원본 변경 (list는 mutable한 집합 자료형)
print("14. list 원본을 reverse:")
m = [1, 2, 3, 4]
print("reverse 전:", m)  # reverse 전: [1, 2, 3, 4]
m.reverse()
print("reverse 후:", m)  # reverse 후: [4, 3, 2, 1]
	   		 # list는 값이 mutable하기 때문에 원본의 값이 바뀜.

13. 다시 한 번 뒤집어줍니다. reversed(변수명), 그런데 list형 내의 함수가 아니라 __builtins__ 내의 함수입니다.
## reversed(변수명) 함수는 원본을 변경시키지 않습니다.

#10. 거꾸로 처리 2    ==> reverse된 복사본을 반환 (원본 유지)
m = [1, 2, 3, 4]
print("15. __builtins__의 reversed를 이용하여 list 원본을 이용해 reversed list 생성:")
reveresed_m = reversed(m)
print("__builtins__ reversed 후:", list(reveresed_m))    #__builtins__ reversed 후: [1, 2, 3, 4] # 출력 전 list로 형변환 필요

14. 정렬해주는 함수, 변수명.sort() 입니다. 원본 자체를 변경합니다.
변수명.sort(reverse=True)reverse 값을 True로 주면 내림차순 정렬을 해줍니다.

#11. 정렬 1 - 자신이 정렬, list.sort()  (원본 변경)
print("16. list 원본을 sort:")
m= [30, 50, 20, 10, 40]
print("sort 전:", m)         # sort 전: [30, 50, 20, 10, 40]
m.sort()    # 오름차순
print("sort 후:", m)         # sort 후: [10, 20, 30, 40, 50]
m.sort(reverse=True)    # 내림차순
print("내림차순 sort:", m)    # 내림차순 sort: [50, 40, 30, 20, 10]

15. sorted(변수명), __builtins__에 있는 함수로서, 원본 값에 영향을 주지 않습니다. (원본 유지
변수명.sort()와 마찬가지로 reverse 값을 True로 주면 내림차순으로 정렬합니다.

#12. 정렬 2 - 정렬된 복사본 반환, sorted(list)  (원본 유지)
print("17. __builtins__의 sorted를 이용하여 list 원본을 이용해 sorted list 생성:")
m= [30, 50, 20, 10, 40]
print("sort 전:", m)                     #sort 전: [30, 50, 20, 10, 40]
sorted_m = sorted(m)         
print("sort 후:", sorted_m)              #sort 후: [10, 20, 30, 40, 50]

sorted_m = sorted(m, reverse=True) # 내림차순
print("내림차순 sort 후:", sorted_m)      #내림차순 sort 후: [50, 40, 30, 20, 10]

 


14.변수명.sort()을 이용한 심화, 특화된 정렬 방법입니다.
기본 변수명.sort()입니다. 

m = ['1', '10', '87', '8', '99', '2']
m.sort()            # 아스키 코드 값으로 정렬되어 숫자 크기 정렬이 아니라 앞 숫자의 크기에 따라 정렬됨.
print("18. 문자열형태의 정수값 정렬", m)       #18: 문자열형태의 정수값 정렬 ['1', '10', '2', '8', '87', '99']

정렬시에 key값에 함수명을 대입할 수 있습니다.
key값에 int를 주어 정수값을 기준으로 정렬할 수도 있고 len 값을 주어 문자열의 길이를 기준으로 정렬할 수도 있습니다.
(이것은 이후 일급객체에 대해 배우면 len()함수가 왜 데이터값으로 쓰이는지 알 수 있습니다.)

m.sort(key=int)     # 지정된 함수를 이용해서 정렬 # str를 int로 형변환하여 숫자 크기대로 정렬
print("19. 문자열의 정수값 기준 정렬", m, type(m))  #19: 문자열의 정수값 기준 정렬 ['1', '2', '8', '10', '87', '99'] <class 'list'>
# 정렬시에 key 값을 기준으로 정렬을 한 것이지 list를 key값에 해당하는 데이터형으로 형변환 한 것은 아님

m = ['1', '100', '8567', '88', '99', '23']
m.sort(key=len)     # str의 len를 기준으로 정렬
print("20. 문자열 길이 기준 정렬", m, type(m))   #20: 문자열 길이 기준 정렬 ['1', '88', '99', '23', '100', '8567'] <class 'list'>

그리고, 위에서도 말했듯이, reverse 값을 True값으로 주면 내림차순으로 정렬을 합니다.

m.sort(key=len, reverse=True)     # str의 len를 기준으로 정렬   # reverese=True, 내림차순
print("20. 문자열 길이 기준 내림차순 정렬", m, type(m))  #20: 문자열 길이 기준 내림차순 정렬 ['8567', '100', '88', '99', '23', '1'] <class 'list'>

 


마지막으로~~ enumerate함수입니다.
enumerate함수는 index값과 value값을 반환해줍니다.

for index, value in enumerate([10, 54, 35]):
    print(index, value)         # 0 10      1 54        2 35

함수 얘기를 하면 항상 많아서 글이 너무 길고 좀 난잡해집니다.
어떻게 요약을 해야할지도 모르겠고;;;; 하핫;;

쨋든. 그럼 이만하고 종료하겠습니다.
그럼 이만~ 감사합니닷.

반응형

댓글