Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 문자열 리스트의 지정된 인덱스에서 공통 문자 찾아 출력하기

문자열로 이루어진 리스트에서 각 문자열의 특정 인덱스에 공통으로 등장하는 문자를 출력해야 하는 경우가 있습니다. 이럴 때는 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이면 해당 위치의 문자가 모두 동일하다는 뜻입니다. 가독성과 유지보수 측면에서 이 방식이 더 선호되기도 합니다.