Akashic Records

[추가자료] 2.2 변수와 자료형 리스트(list) 슬라이싱 본문

Python for Beginners

[추가자료] 2.2 변수와 자료형 리스트(list) 슬라이싱

Andrew's Akashic Records 2024. 5. 24. 12:21
728x90

 

리스트의 일부분을 다루는 작업을 "슬라이싱(slicing)"이라고 합니다. 파이썬에서 슬라이싱을 사용하면 리스트의 특정 부분만을 쉽게 추출할 수 있습니다. 슬라이싱은 리스트[start:end:step] 형식으로 사용되며, start는 시작 인덱스, end는 종료 인덱스(하지만 이 인덱스의 요소는 포함되지 않음), step은 요소들 사이의 간격을 지정합니다.

다음은 파이썬 리스트 슬라이싱을 사용한 몇 가지 예시입니다:

 

예시 코드 1: 기본 슬라이싱

# 리스트 생성
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 리스트의 일부 추출
subset = numbers[2:6]
print("기본 슬라이스:", subset)  # [2, 3, 4, 5]

 

예시 코드 2: 스텝 지정

# 스텝을 이용해 리스트의 일부 추출
subset_step = numbers[1:8:2]
print("스텝이 있는 슬라이스:", subset_step)  # [1, 3, 5, 7]

 

예시 코드 3: 음수 인덱스와 슬라이싱

# 음수 인덱스를 사용하여 리스트의 끝에서 부분 추출
subset_negative = numbers[-5:-1]
print("음수 인덱스 슬라이스:", subset_negative)  # [5, 6, 7, 8]

 

예시 코드 4: 전체 리스트를 스텝으로 슬라이싱

# 전체 리스트에 스텝 적용
every_other = numbers[::2]
print("전체 리스트의 홀수 위치 값들:", every_other)  # [0, 2, 4, 6, 8]

 

예시 코드 5: 리스트 뒤집기

# 리스트를 뒤집기
reversed_numbers = numbers[::-1]
print("리스트 뒤집기:", reversed_numbers)  # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

위의 예제들은 파이썬에서 리스트의 일부분을 다루는 다양한 방법을 보여줍니다. 슬라이싱을 사용하면 매우 간단하고 효율적으로 데이터의 부분 집합을 처리할 수 있습니다.

 

예시 코드: 전체

# 리스트 생성
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 리스트의 일부 추출
subset = numbers[2:6]
print("기본 슬라이스:", subset)  # [2, 3, 4, 5]


# 스텝을 이용해 리스트의 일부 추출
subset_step = numbers[1:8:2]
print("스텝이 있는 슬라이스:", subset_step)  # [1, 3, 5, 7]

# 음수 인덱스를 사용하여 리스트의 끝에서 부분 추출
subset_negative = numbers[-5:-1]
print("음수 인덱스 슬라이스:", subset_negative)  # [5, 6, 7, 8]

# 전체 리스트에 스텝 적용
every_other = numbers[::2]
print("전체 리스트의 홀수 위치 값들:", every_other)  # [0, 2, 4, 6, 8]

# 리스트를 뒤집기
reversed_numbers = numbers[::-1]
print("리스트 뒤집기:", reversed_numbers)  # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

players = ['charles', 'martina', 'michael', 'florence', 'eli']

# 처음부터 4번째까지 ['charles', 'martina', 'michael', 'florence']
print(players[:4])

# 3번째부터 마지막까지 ['michael', 'florence', 'eli']
print(players[2:])


print("Here are the first three players on my team:")
for player in players[:3]: # 1
    print(player.title())
    
    
my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:] # 리스트를 복사 두개는 다른 메모리 참조

my_foods.append('cannoli')
friend_foods.append('ice cream')
# 두개는 별도의 리스트
print("My favorite foods are:")
print(my_foods)

print("\nMy friend's favorite foods are:")
print(friend_foods)

my_foods = ['pizza', 'falafel', 'carrot cake']

# 두개는 같은 메모리 참조
friend_foods = my_foods

my_foods.append('cannoli')
friend_foods.append('ice cream')

print("My favorite foods are:")
print(my_foods)

print("\nMy friend's favorite foods are:")
print(friend_foods)

 

range 함수 사용

Python에서 range 함수는 특정 범위의 숫자를 생성하는 데 사용됩니다. 이 함수는 for 루프와 함께 자주 사용되며, 지정된 범위에 따라 숫자 시퀀스를 생성합니다. range 함수는 매우 유용하며 메모리를 효율적으로 사용하는 이터러블 객체를 생성합니다.

 

range 함수의 기본 구성

range는 최대 세 개의 매개변수를 받을 수 있습니다:

  1. start: 시퀀스의 시작 숫자입니다. 이 매개변수를 생략하면 0에서 시작합니다.
  2. stop: 시퀀스의 종료 숫자로, 이 값은 생성된 시퀀스에 포함되지 않습니다. 이 매개변수는 필수입니다.
  3. step: 숫자 간의 간격을 지정합니다. 이 매개변수를 생략하면 1이 기본값입니다.

range의 사용 예시

# 0부터 9까지의 숫자 생성
for i in range(10):
    print(i)

# 5부터 9까지의 숫자 생성
for i in range(5, 10):
    print(i)

# 0부터 9까지, 각 숫자 사이에 2의 간격을 두고 생성
for i in range(0, 10, 2):
    print(i)

# 10부터 1까지 역순으로 숫자 생성
for i in range(10, 0, -1):
    print(i)

 

range 함수의 특징

  • 메모리 효율성: range필요할 때만 숫자를 생성합니다. 이는 "지연 평가" 또는 "lazy evaluation"이라고 불리며, range 객체 자체는 생성된 모든 숫자를 메모리에 보관하지 않습니다. 이는 큰 범위의 숫자를 사용할 때 매우 유용합니다.
  • 이터러블: range 객체는 반복 가능한 객체로, for 루프에서 사용할 수 있습니다. 하지만 리스트나 튜플과 같은 일반적인 컬렉션 타입은 아니며, 인덱싱이나 슬라이싱은 가능하지만, 리스트의 메서드들은 사용할 수 없습니다.
  • 불변성: range 객체는 생성 후 변경할 수 없습니다. 따라서, 한 번 생성되면 그 매개변수를 변경할 수 없습니다.

range는 파이썬에서 매우 자주 사용되는 함수이며, 특히 루프와 함께 자주 사용되므로 그 사용법을 잘 익혀 두면 매우 도움이 됩니다.

728x90
Comments