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

0901_2일차_Python08_리스트_설명_및_인덱싱_슬라이싱

by NickNuma 2020. 9. 4.

집합형 자료형 중, 리스트에 대한 설명입니다.


리스트는 대괄호 ([ ])로 표현합니다. 순서가 존재하며, 중복 또한 허용됩니다.
그리고 값 변경 또한 가능한 데이터형입니다. (mutable)

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

        b. 리스트 제공 함수
        c. 인덱싱 및 슬라이싱
        d. 리스트 특징
            - [] 표현
            - 순서 존재, 중복 허용
            - 값 변경 가능 ( mutable )

"""

 


리스트는 대괄호를 [ ] 직접 사용하여 생성할 수 있으며 list(집합형 데이터)로도 사용 가능합니다.

# 1. 리스트 생성
str_list = ["홍길동", "이순신"]
int_list = [10, 10, 20]
empty_list = []
xxx = list("hello")		#문자열 리스트로 변환
xx2 = list((100, 100, 200))	# 튜플 리스트로 변환
mixed_list = [10, 'abc', 2.34]  # 자주 사용하는 형태는 아님, mixed list


 


리스트도 문자열과 같이 인덱싱(indexing)과 슬라이싱(slicing)이 가능합니다.

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

        b. 리스트 제공 함수
        c. 인덱싱 및 슬라이싱
            ==> 문자열의 인덱싱, 슬라이싱과 동일  (순방향, 역방향)

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

        e. 얕은 복사와 깊은 복사 (call by value, call by reference)
        
"""

 


먼저, 인덱싱(indexing)입니다.
인덱싱은 특정 위치를 지정해서 값 하나만을 얻어내는 작업입니다.
변수명[위치값]으로 사용합니다.
추가로, 위치값을 -로 하여 뒤에서 부터 읽을 수 있습니다. 이때에 가장 뒤의 값은 변수명[-1]을 갖습니다.

#1. 인덱싱
n = [10, 20, 30, 30, 40, 50, 60]
print("1:", n[0])   #10
print("2:", n[3])   #30
print("3:", n[-1])  #60
print("4:", n[-3])  #40
print("="*100)

 


다음은 슬라이싱(slicing) 입니다.
슬라이싱(slicing)은 특정 범위를 지정하여 1개 이상의 값을 얻어내는 방법입니다.
변수명[start : end] 시작 위치(start) 끝 위치(end)를 정해주고 그 사이 값을 가져옵니다. ( start <= [변수] < end )
시작과 끝의 위치를 지정하여 start <= [변수] < end로 사용할 수도 있고
끝 위치만 사용해서 처음부터 끝까지, 시작 위치만 사용해서 시작 위치부터 끝까지 범위를 지정할 수 있습니다.
아무것도 지정하지 않으면 전체 데이터를 가져옵니다. 변수명[:]

추가로, step값을 지정하여 띄엄띄엄 값을 얻어낼수도 있습니다.  변수명 [ start : end : step ]

#2. 슬라이싱 ==> 범위지정해서 검색 방법

m = [10, 20, 30, 30, 40, 50, 60, 70, 70, 80, 90, 100]
# 가. 순방향:   앞에서부터 검색(양수 이동)
print("5:", m[0:5])     # [10, 20, 30, 30, 40]
print("6:", m[3:8])     # [30, 40, 50, 60]
print("7:", m[:8])      # [10, 20, 30, 30, 40, 50, 60, 70]
print("8:", m[:8])      # [10, 20, 30, 30, 40, 50, 60, 70]
print("9:", m[1:])      # [20, 30, 30, 40, 50, 60, 70, 70, 80, 90, 100]
print("10:", m[:])      # [10, 20, 30, 30, 40, 50, 60, 70, 70, 80, 90, 100]
print("11:", m[0:5:2])  # [10, 30, 40]
print("="*100)

# 나. 역방향: 뒤에서부터 검색 (음수 이동)
# m = [10, 20, 30, 30, 40, 50, 60, 70, 70, 80, 90, 100]
print("12:", m[-5:-1])  # [70, 70, 80, 90]
print("13:", m[-5:])    # [70, 70, 80, 90, 100]
print("15:", m[:-1])    # [10, 20, 30, 30, 40, 50, 60, 70, 70, 80, 90]
print("16: 역순(*****):", m[::-1])   # [100, 90, 80, 70, 70, 60, 50, 40, 30, 30, 20, 10]
print("="*100)

 


마지막으로, 중첩 리스트라는 것이 있습니다. 2중 리스트이지요.
리스트 안에 또다른 리스트가 있는 있는 리스트를 말합니다.
이런 중첩 리스트 역시 인덱싱(indexing)과 슬라이싱(slicing)이 가능합니다.

"""
먼저 이런 중첩 리스트가 있습니다.
이 중첩 리스트의 7 값을 인덱싱하여 출력하겠습니다.
"""
m = [1, 2, 3, [9, 8, 7, 6, 4]]

m2 = m[3]       # [9, 8, 7, 6, 4]
# m2 = [9, 8, 7, 6, 4]
print(m2[2])    # 7

"""
	 위의 절차는 설명을 위해서 한 것이고
	 일반적으로는 위의 과정 없이 바로 중첩 리스트의 값을 인덱싱합니다.
"""
m = [1, 2, 3, [9, 8, 7, 6, 4]]
print(m[3][2]) 	# 7
"""
	위에서 이미 중첩 리스트의 인덱싱 방법을 배웠기 때문에
    슬라이싱은 쉬울 것입니다. 그냥 똑같이 하시면 됩니다.
	하지만 이번엔 순방향 방법과 역방향 방법을 같이 보여드리겠습니다.
"""

m = [1, 2, 3, [9, 8, 7, 6, 4]]
# 질문2?   9, 8, 7, 6 값을 슬라이싱하여 출력하시오.
print(m[3][0:4])	# [9, 8, 7, 6]		순방향 슬라이싱
print(m[3][-5:-1])	# [9, 8, 7, 6]		역방향 슬라이싱

이미 문자열에서 인덱싱과 슬라이싱을 배웠기때문에 어렵지 않게 마무리할 수 있었습니다.


 

다음엔 리스트의 함수에 대해서 살펴보도록 하겠습니다.

그럼 이만~

반응형

댓글