상세 컨텐츠

본문 제목

원하는 개수만큼 리스트에서 잘라 출력하기

Python

by techbard 2024. 12. 3. 20:30

본문

반응형

< 구현 >

 

  1. 리스트는 문자열을 담고 있다.
  2. 정해진 숫자의 리스트 요소로 잘라서 각각 출력한다.

 

# 밑에 구현은 이해도 어렵고 C 스타일로 구현한 것으로 보인다. 24년이 된 지금 파이썬 답게 다시 한 번 구현해 본다.

fruits = ['apple', 'banana', 'cherry',
 'dragon fruit', 'Elderberry', 'Feijoa', 'Guava']

divider = 4
split_position = [(i, i+divider) for i in range(0, len(fruits), divider)]

for start, end in split_position:
    print(fruits[start:end])

# Output:
# ['apple', 'banana', 'cherry', 'dragon fruit']
# ['Elderberry', 'Feijoa', 'Guava']

# 알고리즘이고 뭐고 없다. 그냥 원하는 슬라이스 인덱스를 추출하고 그대로 슬라이싱하는게 간단하다.
# 주는 것과 받는 것 두 개로 구현된 것이 나중에도 이해하기 쉬울 듯

 

 

 

- 알고리즘 고민

이제는 알고리즘에 대해서 고민해 보자.

구현 스펙중 하나는 정수 개수만큼 요소를 끊어서 출력하라는 것이다.

이 정수 개수를 정의해 보자.

separator 이던 divider 이던 상관없다. 의미만 통하면 되나까.

divider = 3

# 리스트의 요소를 세 개씩 끊어 출력한다. 이 변수는 요소 3개씩 끊어 출력함을 의미한다.

  1. 맨 처음에는 리스트 요소 인덱스 0 에서 3까지 출력하면 요소 3개가 될 것이다. 확인해 보자.
    1. print(colors[0:3])
    2. (결과)
    3. ['red', 'yellow', 'black']
  2. 그럼 두 번째 출력 내용은 어떻게 나타낼 수 있나? [0:3]까지로 3개 요소를 꺼냈으니 [4:6] 인가? 아니다.
    1. print(colors[3:6])
    2. (결과)
    3. ['brown', 'white', 'purple']
  3. 즉, 리스트 슬라이스 해서 꺼낸 결과를 출력하면 되는데 슬라이스를 하는 숫자만 원하는 숫자로 만들어 내면 된다. 다음과 같이 표현 가능하다.
  4. 숫자 요소로 표현
    1. colors[0:3] -> colors[3:6]
  5. 변수로 표현
    1. colors[startPos : i]
  6. for ~ range 함수와 변수로 표현한 리스트 슬라이스의 결합
    1. 위에서 배운 문법을 이용해서 원하는 결과 (첫번째 회돌이에서는 0:3 두번째 회돌이에서는 3:6 이 나오려면)

 

for i in range(startPos, endPos+divider, divider):

colors[startPos : i]

 

따라서, 다음의 코드로 표현이 가능하다.

 

colors = ['red', 'yellow', 'black', 'brown', 'white', 'purple']

 

start_pos = 0

end_pos = len(colors)

 

div = 3

 

for idx in range(start_pos, end_pos + div, div):

out = colors[start_pos:start_pos + div]

if out != []:

print(out)

start_pos = start_pos + div

 

# 결과

['red', 'yellow', 'black']

['brown', 'white', 'purple']

 

원하는 요소 개수로 끊어서 출력하기 위해서 슬라이스 표기법의 숫자를 원하는 대로 생성하는 방법을 사용했다. 회돌이하면서 [] 리스트가 출력될 수 있으므로 비어 있을 때는 출력하지 않는다.

 

divider = 3 의 결과

 

['red', 'yellow', 'black']

['brown', 'white', 'purple']

 

divider = 5 의 결과

 

['red', 'yellow', 'black', 'brown', 'white']

['purple']

 

divider = 7 의 결과

 

['red', 'yellow', 'black', 'brown', 'white', 'purple']

 

또 다른 구현 방법은 다음과 같다. 리스트 슬라이스는 이용하지 않고 배열의 개수만 가지고 로직을 만들어 보았다.

 

 

 

확실히 슬라이스의 특성을 이용하지 않으면 로직이 복잡해 지고 실수의 여지가 많지만 if ~ then의 논리력을 연습하기에는 좋은 것 같다.

반응형

관련글 더보기

댓글 영역