haju__log

[python] 슬라이스(slice), 슬라이스로 리스트 수정하기 본문

코테관련 이론

[python] 슬라이스(slice), 슬라이스로 리스트 수정하기

haju 2023. 5. 2. 16:25
반응형

✅ 슬라이싱(slicing)

  • 리스트나 문자열에서 값을 여러 개 가져오는 기능
  • 전달 받은 범위의 값을 복사하여 전달하는 것!! ⭐
  • list[a:b] 일 경우, a~b-1까지 출력함
text= "hello world"
print(text)
text = text[1:5]
print(text)

list=[0,1,2,3,4,5]
print(list)
list=list[1:3]
print(list)

  • slice를 하면 해당하는 부분의 리스트나 문자열을 새로 만들어 준다.
  • 시작과 끝부분 가져오기
# 2번째 인덱스부터 끝까지 반환
list[2:]

# 처음부터 1번째 인덱스의 값까지 반환
list[:2]

# 처음부터 끝까지 전부 반환
list[:]

 

  • 역순으로 가져오기
list1=[1,2,3,4,5]

# 뒤에 있는 값 3개를 출력하기
print(list1[-3:])
# 답 : [3,4,5]

# 역순으로 출력하기
print(list1[::-1])
답 : [5, 4, 3, 2, 1]

✅ Slice의 step

  • slice한 값의 범위에서 step 값을 주어 그 값만큼 건너뛰어 가져오는 기능
  • list[시작값:끝값:step]
list1=list(range(20))
print(list1)

# 인덱스가 5~14인 요소를 출력
print(list1[5:15])
# 인덱스를 2씩 증가시키면서 요소를 가져옴
print(list1[5:15:2])

 

  • step 값을 음수로 설정할 수 있음!
list1=list(range(20))
print(list1)

# 거꾸로 출력하는데, 5인덱스 이전까지 출력이므로, 
# 마지막 요소는 6이 된다!
print(list1[15:5:-1])
# 거꾸로 인덱스를 2씩 감소시키면서 요소를 가져옴
print(list1[15:5:-2])

Slice로 리스트 수정 활용
  • 삭제
numbers=list(range(10))
print("원래 리스트:",numbers)

print("요소 하나만 삭제")
del numbers[0]
print(numbers)

print("범위 설정해서 삭제")
del numbers[:5]
print(numbers)

 

  • 수정
  •  수정할 값을 넣을 땐, list[1:3]= 8 불가! 꼭 []에 값을 넣어야한다. (  list[1:3]=[8]  )
numbers=list(range(6,10))
print("원래 리스트:",numbers)

print("범위 확인")
print(numbers[1:3])

print("범위 설정한 부분 한번에 값 바꾸기")
numbers[1:3]=[77,88]
print(numbers)

print("범위 설정한 부분보다 많은 값을 추가할 수도 있다!")
numbers[1:3]=[77,88,99]
print(numbers)

print("범위 설정한 부분 보다 더 적은 개수로 수정할 수 있다!")
numbers[1:4]=[5]
print(numbers)

 

반응형