파이썬(Python)에서는 0과 1로만 이루어진 리스트를 하나의 이진수(binary number)로 간주하여 십진수 정수로 손쉽게 변환할 수 있습니다. 이 글에서는 가장 널리 쓰이는 두 가지 방법, 즉 int() 함수를 이용하는 방법과 비트 왼쪽 시프트 연산자(<<)를 이용하는 방법을 예제 코드와 함께 살펴봅니다.
방법 1. int() 함수 사용하기
int() 함수는 두 개의 인자를 받아 입력값을 지정된 진법의 정수로 변환합니다.
int(x, base=10)
숫자 또는 문자열 x로부터 정수 객체를 생성하여 반환합니다.
아래 예제에서는 리스트의 각 요소를 문자열로 변환한 뒤 join()으로 하나의 문자열로 합치고, 이를 2진수(base=2)로 해석하여 정수로 변환합니다.
예제 코드
List = [1, 1, 0, 1, 0, 1]
print("리스트 : " + str(List))
# 이진 리스트를 정수로 변환
result = int("".join(str(i) for i in List), 2)
# 결과 출력
print("변환 값 : " + str(result))
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
리스트 : [1, 1, 0, 1, 0, 1]
변환 값 : 53
즉, 이진수 110101은 십진수로 53에 해당합니다.
방법 2. 비트 왼쪽 시프트 연산자 사용하기
비트 왼쪽 시프트 연산자(<<)를 활용하면 별도의 문자열 변환 없이 리스트를 직접 정수로 바꿀 수 있습니다. 동작 원리는 다음과 같습니다.
- 기존 결과 값을 왼쪽으로 한 비트 밀어 (
result << 1) 새로운 자릿수 공간을 만듭니다. - 비트 OR 연산(
|)으로 현재 자릿수의 값을 결과에 더해 줍니다. - for 반복문으로 리스트의 모든 자릿수를 순회하며 위 과정을 반복합니다.
예제 코드
List = [1, 0, 0, 1, 1, 0]
print("리스트 : " + str(List))
# 이진 리스트를 정수로 변환
result = 0
for digits in List:
result = (result << 1) | digits
# 결과 출력
print("변환 값 : " + str(result))
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
리스트 : [1, 0, 0, 1, 1, 0]
변환 값 : 38
이진수 100110은 십진수로 38이 됩니다.
정리
두 방식 모두 동일한 결과를 얻을 수 있지만, 성격이 조금 다릅니다.
- int() 함수 방식: 코드가 짧고 직관적이어서 가독성이 좋습니다. 다만 리스트 전체를 문자열로 합치는 과정이 필요합니다.
- 시프트 연산 방식: 문자열 변환 없이 비트 연산만으로 처리하므로 효율적이며, 비트 단위 연산에 익숙해지는 데 도움이 됩니다.
상황에 맞게 적절한 방법을 선택하여 이진 리스트를 정수로 변환해 보세요.