리스트의 모든 요소에서 특정 숫자(자릿수)를 제거해야 하는 경우가 종종 있습니다. 이럴 때는 반복문과 set 연산자, 그리고 문자열(str) 메서드를 함께 활용하면 효과적으로 해결할 수 있습니다.
예제
다음은 리스트의 각 요소에서 특정 숫자를 제거하는 파이썬 프로그램입니다.
my_list = [123, 565, 1948, 334, 4598]
print('The list is :')
print(my_list)
key = 3
print('The key is :')
print(key)
my_result = []
for element in my_list:
if list(set(str(element)))[0] == str(key) and len(set(str(element))) == 1:
my_result.append('')
else:
my_result.append(int(''.join([element_1 for element_1 in str(element) if int(element_1) != key])))
print('The result is :')
print(my_result)
출력 결과
The list is :
[123, 565, 1948, 334, 4598]
The key is :
3
The result is :
[12, 565, 1948, 4, 4598]
코드 설명
- 정수로 이루어진 리스트를 정의하고 콘솔에 출력합니다.
- 제거할 숫자인 key 값을 정의하고 출력합니다.
- 결과를 저장할 빈 리스트를 생성합니다.
- 리스트를 반복하면서 각 요소를 문자열로 변환한 뒤 set으로 만들고, 다시 리스트로 변환해 첫 번째 값이 key와 일치하는지 확인합니다.
- 'and' 연산자를 사용해 해당 요소의 고유한 숫자 개수가 1개뿐인지도 함께 검사합니다. 즉, 요소 전체가 key 하나로만 이루어진 경우(예: 333)를 찾는 것입니다.
- 조건이 참이면 결과 리스트에 빈 문자열('')을 추가합니다.
- 그렇지 않으면 리스트 컴프리헨션(list comprehension)으로 각 자릿수를 순회하며 key와 같지 않은 숫자만 남긴 뒤 문자열로 합칩니다.
- 합쳐진 문자열을 다시 정수로 변환해 결과 리스트에 추가합니다.
- 최종 결과가 콘솔에 출력됩니다.
더 간단한 방법: 리스트 컴프리헨션 한 줄 처리
위 코드는 조건 분기가 다소 복잡합니다. 단순히 각 숫자에서 특정 자릿수만 제거하고 싶다면 다음처럼 한 줄로 처리할 수도 있습니다.
my_list = [123, 565, 1948, 334, 4598]
key = 3
result = [int(''.join(d for d in str(num) if d != str(key))) for num in my_list]
print(result) # [12, 565, 1948, 4, 4598]
이 방식은 각 숫자를 문자열로 바꾼 뒤 key에 해당하는 자릿수를 걸러내고, 남은 자릿수를 이어 붙여 다시 정수로 변환합니다. 예를 들어 123에서 3을 제거하면 12가 되고, 334에서 3을 제거하면 4가 됩니다. 상황에 따라 더 읽기 쉬운 방식을 선택하면 됩니다.