Hướng dẫn how to slice an integer in python - cách cắt một số nguyên trong python

Sau khi tìm kiếm siêng năng, tôi đã tìm thấy một số giải pháp, trong đó mỗi giải pháp đều có ưu điểm và nhược điểm. Sử dụng phù hợp nhất cho nhiệm vụ của bạn.

Tất cả các ví dụ được thử nghiệm với CPython 3.5 trên hệ thống hoạt động GNU/Linux Debian 8.


Sử dụng một đệ quy

Mã số

def get_digits_from_left_to_right(number, lst=None):
    """Return digits of an integer excluding the sign."""

    if lst is None:
        lst = list()

    number = abs(number)

    if number < 10:
        lst.append(number)
        return tuple(lst)

    get_digits_from_left_to_right(number // 10, lst)
    lst.append(number % 10)

    return tuple(lst)

Thử nghiệm

In [121]: get_digits_from_left_to_right(-64517643246567536423)
Out[121]: (6, 4, 5, 1, 7, 6, 4, 3, 2, 4, 6, 5, 6, 7, 5, 3, 6, 4, 2, 3)

In [122]: get_digits_from_left_to_right(0)
Out[122]: (0,)

In [123]: get_digits_from_left_to_right(123012312312321312312312)
Out[123]: (1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 1, 3, 1, 2, 3, 1, 2, 3, 1, 2)

Sử dụng chức năng

In [121]: get_digits_from_left_to_right(-64517643246567536423)
Out[121]: (6, 4, 5, 1, 7, 6, 4, 3, 2, 4, 6, 5, 6, 7, 5, 3, 6, 4, 2, 3)

In [122]: get_digits_from_left_to_right(0)
Out[122]: (0,)

In [123]: get_digits_from_left_to_right(123012312312321312312312)
Out[123]: (1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 1, 3, 1, 2, 3, 1, 2, 3, 1, 2)
0

Mã số

def get_digits_from_right_to_left(number):
    """Return digits of an integer excluding the sign."""

    number = abs(number)

    if number < 10:
        return (number, )

    lst = list()

    while number:
        number, digit = divmod(number, 10)
        lst.insert(0, digit)

    return tuple(lst)

Thử nghiệm

In [125]: get_digits_from_right_to_left(-3245214012321021213)
Out[125]: (3, 2, 4, 5, 2, 1, 4, 0, 1, 2, 3, 2, 1, 0, 2, 1, 2, 1, 3)

In [126]: get_digits_from_right_to_left(0)
Out[126]: (0,)

In [127]: get_digits_from_right_to_left(9999999999999999)
Out[127]: (9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9)

Sử dụng chức năng

In [121]: get_digits_from_left_to_right(-64517643246567536423)
Out[121]: (6, 4, 5, 1, 7, 6, 4, 3, 2, 4, 6, 5, 6, 7, 5, 3, 6, 4, 2, 3)

In [122]: get_digits_from_left_to_right(0)
Out[122]: (0,)

In [123]: get_digits_from_left_to_right(123012312312321312312312)
Out[123]: (1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 1, 3, 1, 2, 3, 1, 2, 3, 1, 2)
0

In [109]: tuple(map(int, str(abs(-123123123))))
Out[109]: (1, 2, 3, 1, 2, 3, 1, 2, 3)

In [110]: tuple(map(int, str(abs(1412421321312))))
Out[110]: (1, 4, 1, 2, 4, 2, 1, 3, 2, 1, 3, 1, 2)

In [111]: tuple(map(int, str(abs(0))))
Out[111]: (0,)

Sử dụng công trình

In [121]: get_digits_from_left_to_right(-64517643246567536423)
Out[121]: (6, 4, 5, 1, 7, 6, 4, 3, 2, 4, 6, 5, 6, 7, 5, 3, 6, 4, 2, 3)

In [122]: get_digits_from_left_to_right(0)
Out[122]: (0,)

In [123]: get_digits_from_left_to_right(123012312312321312312312)
Out[123]: (1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 1, 3, 1, 2, 3, 1, 2, 3, 1, 2)
1

In [112]: tuple(map(int, re.findall(r'\d', str(1321321312))))
Out[112]: (1, 3, 2, 1, 3, 2, 1, 3, 1, 2)

In [113]: tuple(map(int, re.findall(r'\d', str(-1321321312))))
Out[113]: (1, 3, 2, 1, 3, 2, 1, 3, 1, 2)

In [114]: tuple(map(int, re.findall(r'\d', str(0))))
Out[114]: (0,)

Sử dụng chức năng

In [121]: get_digits_from_left_to_right(-64517643246567536423)
Out[121]: (6, 4, 5, 1, 7, 6, 4, 3, 2, 4, 6, 5, 6, 7, 5, 3, 6, 4, 2, 3)

In [122]: get_digits_from_left_to_right(0)
Out[122]: (0,)

In [123]: get_digits_from_left_to_right(123012312312321312312312)
Out[123]: (1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 1, 3, 1, 2, 3, 1, 2, 3, 1, 2)
2

In [117]: decimal.Decimal(0).as_tuple().digits
Out[117]: (0,)

In [118]: decimal.Decimal(3441120391321).as_tuple().digits
Out[118]: (3, 4, 4, 1, 1, 2, 0, 3, 9, 1, 3, 2, 1)

In [119]: decimal.Decimal(-3441120391321).as_tuple().digits
Out[119]: (3, 4, 4, 1, 1, 2, 0, 3, 9, 1, 3, 2, 1)

Chia một số nguyên thành các chữ số trong Python #

Để chia số nguyên thành các chữ số:

  1. Sử dụng lớp
    In [121]: get_digits_from_left_to_right(-64517643246567536423)
    Out[121]: (6, 4, 5, 1, 7, 6, 4, 3, 2, 4, 6, 5, 6, 7, 5, 3, 6, 4, 2, 3)
    
    In [122]: get_digits_from_left_to_right(0)
    Out[122]: (0,)
    
    In [123]: get_digits_from_left_to_right(123012312312321312312312)
    Out[123]: (1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 1, 3, 1, 2, 3, 1, 2, 3, 1, 2)
    
    4 để chuyển đổi số nguyên thành chuỗi.
  2. Sử dụng vòng lặp
    In [121]: get_digits_from_left_to_right(-64517643246567536423)
    Out[121]: (6, 4, 5, 1, 7, 6, 4, 3, 2, 4, 6, 5, 6, 7, 5, 3, 6, 4, 2, 3)
    
    In [122]: get_digits_from_left_to_right(0)
    Out[122]: (0,)
    
    In [123]: get_digits_from_left_to_right(123012312312321312312312)
    Out[123]: (1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 1, 3, 1, 2, 3, 1, 2, 3, 1, 2)
    
    8 để lặp qua chuỗi.
  3. Sử dụng lớp
    In [121]: get_digits_from_left_to_right(-64517643246567536423)
    Out[121]: (6, 4, 5, 1, 7, 6, 4, 3, 2, 4, 6, 5, 6, 7, 5, 3, 6, 4, 2, 3)
    
    In [122]: get_digits_from_left_to_right(0)
    Out[122]: (0,)
    
    In [123]: get_digits_from_left_to_right(123012312312321312312312)
    Out[123]: (1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 1, 3, 1, 2, 3, 1, 2, 3, 1, 2)
    
    5 để chuyển đổi từng bộ nền thành số nguyên và nối chúng vào danh sách.

Copied!

my_int = 13579 my_list = [int(x) for x in str(my_int)] print(my_list) # 👉️ [1, 3, 5, 7, 9]

Chúng tôi lặp lại các chữ số được bọc trong một chuỗi và trên mỗi lần lặp, chúng tôi sử dụng lớp

In [121]: get_digits_from_left_to_right(-64517643246567536423)
Out[121]: (6, 4, 5, 1, 7, 6, 4, 3, 2, 4, 6, 5, 6, 7, 5, 3, 6, 4, 2, 3)

In [122]: get_digits_from_left_to_right(0)
Out[122]: (0,)

In [123]: get_digits_from_left_to_right(123012312312321312312312)
Out[123]: (1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 1, 3, 1, 2, 3, 1, 2, 3, 1, 2)
5 để chuyển đổi giá trị thành số nguyên trước khi thêm kết quả vào danh sách.

Ngoài ra, bạn có thể sử dụng hàm

def get_digits_from_right_to_left(number):
    """Return digits of an integer excluding the sign."""

    number = abs(number)

    if number < 10:
        return (number, )

    lst = list()

    while number:
        number, digit = divmod(number, 10)
        lst.insert(0, digit)

    return tuple(lst)
3 để chia số nguyên thành các chữ số.

Hàm bản đồ () có hàm và có thể lặp lại như các đối số và gọi hàm với từng mục của ITEBELLE.

Chuỗi có thể lặp lại và số nguyên thì không, vì vậy bước đầu tiên là chuyển đổi số nguyên thành một chuỗi.

Bạn cũng có thể sử dụng một vòng lặp

In [121]: get_digits_from_left_to_right(-64517643246567536423)
Out[121]: (6, 4, 5, 1, 7, 6, 4, 3, 2, 4, 6, 5, 6, 7, 5, 3, 6, 4, 2, 3)

In [122]: get_digits_from_left_to_right(0)
Out[122]: (0,)

In [123]: get_digits_from_left_to_right(123012312312321312312312)
Out[123]: (1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 1, 3, 1, 2, 3, 1, 2, 3, 1, 2)
8 đơn giản để đạt được kết quả tương tự.

Để chia số nguyên thành các chữ số:

  1. Sử dụng lớp
    In [121]: get_digits_from_left_to_right(-64517643246567536423)
    Out[121]: (6, 4, 5, 1, 7, 6, 4, 3, 2, 4, 6, 5, 6, 7, 5, 3, 6, 4, 2, 3)
    
    In [122]: get_digits_from_left_to_right(0)
    Out[122]: (0,)
    
    In [123]: get_digits_from_left_to_right(123012312312321312312312)
    Out[123]: (1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 1, 3, 1, 2, 3, 1, 2, 3, 1, 2)
    
    4 để chuyển đổi số nguyên thành chuỗi.
  2. Sử dụng vòng lặp
    In [121]: get_digits_from_left_to_right(-64517643246567536423)
    Out[121]: (6, 4, 5, 1, 7, 6, 4, 3, 2, 4, 6, 5, 6, 7, 5, 3, 6, 4, 2, 3)
    
    In [122]: get_digits_from_left_to_right(0)
    Out[122]: (0,)
    
    In [123]: get_digits_from_left_to_right(123012312312321312312312)
    Out[123]: (1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 1, 3, 1, 2, 3, 1, 2, 3, 1, 2)
    
    8 để lặp qua chuỗi.
  3. Sử dụng lớp
    In [121]: get_digits_from_left_to_right(-64517643246567536423)
    Out[121]: (6, 4, 5, 1, 7, 6, 4, 3, 2, 4, 6, 5, 6, 7, 5, 3, 6, 4, 2, 3)
    
    In [122]: get_digits_from_left_to_right(0)
    Out[122]: (0,)
    
    In [123]: get_digits_from_left_to_right(123012312312321312312312)
    Out[123]: (1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 1, 3, 1, 2, 3, 1, 2, 3, 1, 2)
    
    5 để chuyển đổi từng bộ nền thành số nguyên và nối chúng vào danh sách.

Copied!

my_int = 13579 my_list = [] for x in str(my_int): my_list.append(int(x)) print(my_list) # 👉️ [1, 3, 5, 7, 9]

Chúng tôi lặp lại các chữ số được bọc trong một chuỗi và trên mỗi lần lặp, chúng tôi sử dụng lớp

In [121]: get_digits_from_left_to_right(-64517643246567536423)
Out[121]: (6, 4, 5, 1, 7, 6, 4, 3, 2, 4, 6, 5, 6, 7, 5, 3, 6, 4, 2, 3)

In [122]: get_digits_from_left_to_right(0)
Out[122]: (0,)

In [123]: get_digits_from_left_to_right(123012312312321312312312)
Out[123]: (1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 1, 3, 1, 2, 3, 1, 2, 3, 1, 2)
5 để chuyển đổi giá trị thành số nguyên trước khi thêm kết quả vào danh sách.

Ngoài ra, bạn có thể sử dụng hàm

def get_digits_from_right_to_left(number):
    """Return digits of an integer excluding the sign."""

    number = abs(number)

    if number < 10:
        return (number, )

    lst = list()

    while number:
        number, digit = divmod(number, 10)
        lst.insert(0, digit)

    return tuple(lst)
3 để chia số nguyên thành các chữ số.

Copied!

my_int = 13579 my_list = list(map(int, str(my_int))) print(my_list) # 👉️ [1, 3, 5, 7, 9]

Hàm bản đồ () có hàm và có thể lặp lại như các đối số và gọi hàm với từng mục của ITEBELLE.

Chuỗi có thể lặp lại và số nguyên thì không, vì vậy bước đầu tiên là chuyển đổi số nguyên thành một chuỗi.

Lớp

In [121]: get_digits_from_left_to_right(-64517643246567536423)
Out[121]: (6, 4, 5, 1, 7, 6, 4, 3, 2, 4, 6, 5, 6, 7, 5, 3, 6, 4, 2, 3)

In [122]: get_digits_from_left_to_right(0)
Out[122]: (0,)

In [123]: get_digits_from_left_to_right(123012312312321312312312)
Out[123]: (1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 1, 3, 1, 2, 3, 1, 2, 3, 1, 2)
5 được truyền mỗi chuỗi con từ chuỗi và chuyển đổi các giá trị thành số nguyên.

Lưu ý rằng hàm

def get_digits_from_right_to_left(number):
    """Return digits of an integer excluding the sign."""

    number = abs(number)

    if number < 10:
        return (number, )

    lst = list()

    while number:
        number, digit = divmod(number, 10)
        lst.insert(0, digit)

    return tuple(lst)
3 trả về đối tượng
def get_digits_from_right_to_left(number):
    """Return digits of an integer excluding the sign."""

    number = abs(number)

    if number < 10:
        return (number, )

    lst = list()

    while number:
        number, digit = divmod(number, 10)
        lst.insert(0, digit)

    return tuple(lst)
6 (không phải danh sách), vì vậy chúng tôi phải sử dụng lớp
def get_digits_from_right_to_left(number):
    """Return digits of an integer excluding the sign."""

    number = abs(number)

    if number < 10:
        return (number, )

    lst = list()

    while number:
        number, digit = divmod(number, 10)
        lst.insert(0, digit)

    return tuple(lst)
7 để chuyển đổi đối tượng
def get_digits_from_right_to_left(number):
    """Return digits of an integer excluding the sign."""

    number = abs(number)

    if number < 10:
        return (number, )

    lst = list()

    while number:
        number, digit = divmod(number, 10)
        lst.insert(0, digit)

    return tuple(lst)
6 thành danh sách.