How to Get the First Digit of an Integer in Python?

In Python, you can get the first digit of an integer in the following ways:

Using Regular Expression

You can use regular expression in the following way to get the first digit of an integer:

  1. Use the re.search() method with the \d (or [0-9]) pattern to get the first digit from numeric string;
  2. Convert numeric string back to integer;
  3. Add back the minus sign if the number was originally negative.

For example, you can implement this like so:

import re

def first_digit(num):
    # 1: get first digit using regex pattern
    match = re.search(r'\d', str(num))
    # 2: convert matched item to integer
    digit = int(match.group())
    # 3: add sign back as needed
    return -digit if (num < 0) else digit

print(first_digit(1234)) # 1
print(first_digit(-1234)) # -1
print(first_digit(0)) # 0
print(first_digit(-0)) # 0

Using Floored Division

The following formula would give you the first digit of an integer:

quotient = floor(abs(integer) / integerLength - 1)

You can implement it in the following steps:

  1. Convert integer to absolute form;
  2. Get length of the integer to determine the divisor;
  3. Get the integer part from result of the division;
  4. Add back the minus sign if the number was originally negative.
def first_digit(num):
    # 1: convert to absolute form
    dividend = abs(num)
    # 2: get length of integer and determine divisor
    length = len(str(dividend))
    divisor = 10 ** (length - 1)
    # 3: get integer part from result of division
    quotient = dividend // divisor
    # 4: add sign back as needed
    return -quotient if (num < 0) else quotient

print(first_digit(1234)) # 1
print(first_digit(-1234)) # -1
print(first_digit(0)) # 0
print(first_digit(-0)) # 0

Since the dividend is in absolute form, floored division (//) works for both, positive and negative, integers.

This works in the following way:

# num = -1234

# dividend = 1234
# length = 4
# divisor = 10 ^ (4 - 1) = 1000

# quotient = 1234 // 1000
# quotient = 1

# result = -1

Reducing to Single Digit

You can loop over the number and reduce it in each iteration till only a single digit (i.e. digit less than 10) is left. This can be done in the following steps:

  1. Convert integer to absolute form;
  2. Reduce number to single digit:
    • If integer is greater than 10, then keep dividing the number by 10 till a number less than 10 is left, or;
    • If integer is less than 10, then return it as is as it's already a single digit number.
  3. Get the integer part of the resulting decimal number;
  4. Add back the minus sign if the number was originally negative.

For example, you can implement this like so:

def first_digit(num):
    # 1: convert to absolute form
    abs_num = abs(num)
    # 2: reduce number to single digit
    while abs_num >= 10:
        abs_num /= 10
    # 3: get integer part of decimal number
    # 4: add sign back as needed
    return int(-abs_num if (num < 0) else abs_num)

print(first_digit(1234)) # 1
print(first_digit(-1234)) # -1
print(first_digit(0)) # 0
print(first_digit(-0)) # 0

Converting to String and Retrieving First Character

You can convert the integer to string and get the first digit in the following steps:

  1. Convert integer in absolute form to string;
  2. Get the first character;
  3. Convert the numeric character back to integer;
  4. Add back the minus sign if the number was originally negative.

For example, you can implement this like so:

def first_digit(num):
    # 1: convert absolute form to string
    num_str = str(abs(num))
    # 2: get first character
    first_char = num_str[0]
    # 3: convert back to integer
    first_digit_unsigned = int(first_char)
    # 4: add sign back as needed
    return -first_digit_unsigned if (num < 0) else first_digit_unsigned

print(first_digit(1234)) # 1
print(first_digit(-1234)) # -1
print(first_digit(0)) # 0
print(first_digit(-0)) # 0

This post was published by Daniyal Hamid. Daniyal currently works as the Head of Engineering in Germany and has 20+ years of experience in software engineering, design and marketing. Please show your love and support by sharing this post.