문자열로 이루어진 리스트에서 각 문자열의 특정 인덱스에 공통으로 등장하는 문자를 출력해야 하는 경우가 있습니다. 이럴 때는 min 메서드와 리스트 컴프리헨션(list comprehension), 그리고 불리언(Boolean) 플래그 값을 활용하면 효율적으로 해결할 수 있습니다.
예제 코드
아래는 실제 구현 예시입니다.
my_list = ["week", "seek", "beek", "reek", 'meek', 'peek']
print("The list is :")
print(my_list)
min_length = min(len(element) for element in my_list)
my_result = []
for index in range(0, min_length):
flag = True
for element in my_list:
if element[index] != my_list[0][index]:
flag = False
break
if flag:
my_result.append(my_list[0][index])
print("The result is :")
print(my_result)
출력 결과
The list is : ['week', 'seek', 'beek', 'reek', 'meek', 'peek'] The result is : ['e', 'e', 'k']
코드 설명
- 문자열로 구성된 리스트를 정의하고 콘솔에 출력합니다.
- 리스트 컴프리헨션을 사용해 리스트의 모든 요소를 순회하며 각 요소 길이의 최솟값을 구합니다.
- 구한 최솟값을 변수에 저장합니다. 이 값은 비교 가능한 최대 인덱스 범위를 결정하므로, 가장 짧은 문자열을 기준으로 삼는 것과 같습니다.
- 결과를 저장할 빈 리스트를 하나 정의합니다.
- 인덱스 범위만큼 반복하면서 플래그 변수를
True로 초기화합니다. - 리스트의 각 요소를 다시 순회하며, 특정 인덱스의 문자가 첫 번째 문자열의 같은 위치 문자와 다르면 플래그를
False로 설정하고break로 반복문을 즉시 빠져나옵니다. - 플래그 값이 여전히
True라면 해당 인덱스의 문자가 모든 문자열에서 공통이라는 의미이므로 결과 리스트에 추가합니다. - 최종 결과를 콘솔에 출력합니다.
위 예제에서는 여섯 개 단어 모두 1번째, 2번째 자리에 'e'가 있고 마지막 자리에 'k'가 있으므로 ['e', 'e', 'k']가 결과로 출력됩니다.
참고: 더 간결한 대안
zip과 집합(set)을 활용하면 동일한 로직을 한 줄로 표현할 수도 있습니다.
result = [chars[0] for chars in zip(*my_list) if len(set(chars)) == 1] print(result)
zip(*my_list)는 각 문자열의 같은 위치 문자들을 묶어주고, 집합의 크기가 1이면 해당 위치의 문자가 모두 동일하다는 뜻입니다. 가독성과 유지보수 측면에서 이 방식이 더 선호되기도 합니다.