<3-4> __name__, 리스트 슬라이싱
동영상 강좌 : http://pythonkim.tistory.com/notice/77
# Day_03_05_slicing.py
- 다른 파일의 어떤 내용을 사용하고 싶을 때.
1 | import Day_03_05_import | cs |
>> Day_02_02_list.py 파일을 불러오기. (.py 는 생략)
>> 위 파일에서 선언한 변수, 함수를 모두 사용할 수 있다. 해당 파일의 내용을 복붙한것과 같은 효과..!!
>> 하지만 우리는 makeRandoms() 의 사용만 원한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import random def makeRandoms(): a = [] for i in range(10): a.append(random.randrange(100)) return a s = "unused" def a(): pass def b(): pass def c(): pass | cs |
>> 우리가 불러올 파일이 이런식으로 구성되어 있다고 가정하자.
>> makeRandoms() 함수만을 가져다 쓰고 싶다.
>> 하지만 위와 같이 해당 파일을 통채로 import 하면 복붙의 효과이기 때문에
변수 s, a(), b(), c() 도 가져오게 된다.
- 원하지 않는 내용들을 블럭지정 후 Edit - Indent Selection 을 통해 블럭 내용들을 한번에 탭키 처리 한다.
- 그리고 이것들을 사용하지 않기 위해 아래의 1번 라인을 추가 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | if __name__ == '__main__': s = "unused" def a(): pass def b(): pass def c(): pass | cs |
>> 파이썬에는 main() 가 존재하지 않는다. 그래서 이를 흉내낼 필요가 있다.
>> 위와 같이 여러개의 파일이 같이 사용될 때 특히..!!
>> 그것을 흉내내는 변수가 __name__ 이다.
### __main__ 은 첫번째 실행되는 파일을 의미한다.
### __name__ : 파일별로 존재하는 파일 이름
- 현재 파일에 print(__name__) 을 추가하고, import 한 파일에도 print(__name__) 을 추가한 다음 내용을 확인해보자.
1 2 3 | import Day_03_05_import print(__name__) | cs |
>> 실행결과
1 2 | Day_03_05_import : Day_03_05_import __main__ | cs |
>> 1 : import 한 파일에서 실행된 print(__name__)
>> 2 : 현재 파일에서 실행된 print(__name__), 즉 첫 번째로 실행된 파일이다.
- import 한 파일의 함수 사용하기
1 2 3 | Day_03_05_import.random.seed(1) a = Day_03_05_import.makeRandoms() print(a) # [17, 72, 97, 8, 32, 15, 63, 97, 57, 60] | cs |
- 슬라이싱
1 | print(a[0:5]) # [17, 72, 97, 8, 32] | cs |
>> [0, 5) 까지의 데이터들을 의미한다.
>> : 을 이용한 문법을 슬라이싱 이라고 한다.
# 문제
# 뒤쪽 절반 출력하기.
1 | print(a[len(a)//2:]) | cs |
>> print(a[len(a)//2:len(a)]) 도 가능하다.
- 생략
1 | print(a[:]) # [17, 72, 97, 8, 32, 15, 63, 97, 57, 60] | cs |
>> 이런식으로 생략이 가능하다.
>> : 앞의 생략은 맨 앞부터, : 뒤의 생략은 맨 마지막 까지를 의미한다.
- 슬라이싱을 range() 처럼 사용할 수 있다.
1 2 | print(a[::2]) # [17, 97, 32, 63, 57] print(a[::3]) # [17, 8, 63, 60] | cs |
>> 1 : 2칸씩 건너뛴 요소
>> 2 : 3칸씩 건너뛴 요소
- 홀수번째, 짝수번째 요소 출력하기
1 2 3 4 5 | # 짝수번째 요소만 출력 print(a[::2]) # [17, 97, 32, 63, 57] # 홀수번째 요소만 출력 print(a[1::2]) # [72, 8, 15, 97, 60] | cs |
>> 5 : 1번째 요소부터 2칸씩 건너뛰기..!!
- 거꾸로 출력하기
1 | print(a[::-1]) # [60, 57, 97, 63, 15, 32, 8, 97, 72, 17] | cs |
-
1 2 3 4 5 | print(a[len(a)-1:0:-1]) # [60, 57, 97, 63, 15, 32, 8, 97, 72] print(a[len(a)-1:-1:-1]) # [] print(a[-1:-1:-1]) # [] | cs |
>> 1 : 마지막 요소만 제외하고 출력이 된다.
>> 3, 5 라인은 같은 코드이다.
- 거꾸로 홀수번째, 짝수번째 요소만 출력하기
1 2 3 4 | # 거꾸로 홀수번째 요소만 출력하기 print(a[:]) # [17, 72, 97, 8, 32, 15, 63, 97, 57, 60] print(a[::-2]) # [60, 97, 15, 8, 72] print(a[-2::-2]) # [57, 63, 32, 97, 17] | cs |
- 얕은복사 review
1 2 3 4 5 6 7 | b = a c = a a[0] = -1 print(a) # [-1, 72, 97, 8, 32, 15, 63, 97, 57, 60] print(b) # [-1, 72, 97, 8, 32, 15, 63, 97, 57, 60] print(c) # [-1, 72, 97, 8, 32, 15, 63, 97, 57, 60] | cs |
>> a[0] 를 변경했는데, b와 c도 변경됨
- 깊은복사 review
1 2 3 4 5 6 7 8 9 10 11 12 | b = a c = a d = a.copy() e = a[:] a[0] = -1 print(a) # [-1, 72, 97, 8, 32, 15, 63, 97, 57, 60] print(b) # [-1, 72, 97, 8, 32, 15, 63, 97, 57, 60] print(c) # [-1, 72, 97, 8, 32, 15, 63, 97, 57, 60] print(d) # [17, 72, 97, 8, 32, 15, 63, 97, 57, 60] print(e) # [17, 72, 97, 8, 32, 15, 63, 97, 57, 60] | cs |
>> 3 : 이전에 공부한 깊은복사 방법
>> 4 : 슬라이싱을 이용한 깊은복사 // 슬라이싱은 안쪽에 있는 것을 뽑아내는 과정이기 때문에 항상 복사본을 만든다.
- 짝수번째 요소 출력하기
1 2 3 4 5 6 7 | for i in range(0, len(a), 2): print(a[i], end=' ') # -1 97 32 63 57 print() for i in a[::2]: print(i, end=' ') # -1 97 32 63 57 print() | cs |
>> 예전에는 1-3과 같이 하였으나, 이젠 5-7과 같이 하면 된다.
'Language > Python' 카테고리의 다른 글
<3-3> JSON (0) | 2018.03.05 |
---|---|
<3-2> Set 과 Dictionary (0) | 2018.03.02 |
<3-1> 파일 입출력 (0) | 2018.02.23 |
<2-3> 기상청의 전국 날씨정보 파싱, 외부 모듈 추가 (0) | 2018.02.22 |
<2-2> 리스트, 튜플 (0) | 2018.02.15 |