겉바속촉

[PYTHON] 파이썬_리스트(연산, 슬라이싱, 에일리어싱) 본문

IT 일기 (상반기)/PYTHON

[PYTHON] 파이썬_리스트(연산, 슬라이싱, 에일리어싱)

겉바속촉 2021. 1. 5. 14:19
728x90
반응형

 

안녕하세요

겉바속촉입니다

!^^!

 

 

!!파이썬 시작하기!!

 

 

 

 

이번에는

리스트에 대해서 알아보도록 하겠습니다

 

 

 

리스트 중에서도

연산, 슬라이싱, 에일리어싱에 대해서 다룰게요

 

 

 

 

 


 

 

리스트 내 데이터 저장과 접근

 

 

  • 대괄호로 표현하며 각각의 요소는 콤마로 구분
  • 배열 개념과 비슷하게 접근하기!!!


  • 빈 리스트 : 항목을 포함하지 않은 리스트  ---> 빈 리스트를 인덱스로 참조하면 당연히 오류 발생!!

  • heterogeneous : 리스트는 어떤 데이터 타입이든 포함할 수 있음
                           --> 문자든 숫자든 상관 NONO 리스트 자체가 주소를 가지기 때문!!


  • typing 모듈을 포함시켜 리스트 내 값의 기대 타입을 명시

    >>> from typing import List
    >>> def average(L: List[float]) -> float:
                                        
  • 리스트는 가변 mutable 객체 = 리스트 내용을 변경할 수 있음!!
  • 수와 문자열은 불변 immutable

 

(실질적으로는 주소가 변경되는 것)

 

 

 

 

 

리스트 연산

 

 

  • 여러가지 함수들
함수 설명
len(L) 리스트 L 내 항목 수 반환
max(L) 리스트 L 내 최대값 반환
min(L) 리스트 L 내 최소값 반환
sum(L) 리스트 L 내 합계 반환
sorted(L) 항목을 오름차순으로 정렬한 리스트 L의 복사본 반환
L + L 리스트 결합
L * number 횟수만큼 반복
del L 리스트 항목을 삭제

 

 

 

  • in 연산자 : 어떤 객체가 리스트에 들어 있는지 확인

 

문자열에서는 여러가지 항목을 확인 할 수 있지만

리스트에서의 in연산자는 문자열과 달리 항목 한가지만 확인 가능

안그러면 false라고 뜹니다!!

 

 

 

input 함수와 in 연산자 활용한 예시!!

 

 

 

*********참고*********************************

 

  OOO is noble. 형식의 출력

 >>> for noble in nobles:

 ... print(noble, 'is noble.')

 ... print('{} is noble.'.format(noble))

 ... print(f'{noble} is noble.')

 ... print('%s is noble.' %noble)

 

************************************************

 

 

 

 

리스트 슬라이싱

 

  • list[ i : j ] --> 원래 리스트의 인덱스 i 부터  j 전 까지 새로운 리스트 생성

 

 

에일리어싱

 

  • 에일리어싱 : 두 변수의 메모리 주소가 같은 경우

 

 

두 변수가 동일한 주소를 가리키는 경우

 

-> 그래서 원래 것을 고치면 새로운 것에서도 항목 변화

-> 또한 새로운 것에서 고치면 원래 것에서도 항목 변화

 

 

 

 

 

 

리스트를 매개변수로 사용할 때도 에일리어싱이 발생

 

 

예시를 우선 볼게요:)

제가 다음과 같이 함수 하나를 생성했습니다.

리스트의 마지막 항목을 없애고 나머지 항목들이 리스트로 출력되게 하는 함수에요:)

 

 

L 이라는 곳에 rainbow 리스트를 넣어 매개변수로 사용하겠습니다.

그러면 rainbow 가 가리키는 주소를  L 도 동일하게 가리키게 됩니다.

그래서 리스트 변수은 L 을 조작하면 rainbow 역시 동일하게 조작이 되는 것!!!

 

 

여기서 드는 의문 --> 함수 마지막에 return 문이 꼭 필요할까??? NONONO

                       --> 어차피 리스트가 동일한 곳을 가리키는 데 굳이 변수를 리턴할 필요는 없겠쥬!

 

 

 

 

 

 

 

리스트 메서드

 

  • 새로운 리스트를 생성하지 않고 리스트를 수정 = None을 반환: clear, reverse, sort, pop, ... (pop은 값을 반환)
  • copy 메소드 (L : [ : ] 와 동일) 는 list를 반환 --> 아래 비교하는 예시들 참고!!

 

 

 

비교1)

 

a 리스트와 동일한 내용을 가지는 (새) 리스트를 반환

 

a 리스트의 값을 변경해도

b 리스트에 영향을 미치지 않음

a와 b가 다른 주소를 가지고 있는 것을 확인할 수 있음 --> 에일리어싱과 차이점

 

 

 

비교2)

 

 a와 b가 동일한 리스트의 주소를 공유

 

a 리스트의 값을 변경하면

b 리스트에도 반영

 

 

 

비교3)

 

 

b는 a를 슬라이싱

 

id로 확인해보면 새로운 리스트가 만들어짐을 알 수 있다.

 

 

 

728x90
반응형