파이썬에서 정수 분할?


87

내 정수 입력을 가정 12345하고 분할하여 배열에 넣습니다 1, 2, 3, 4, 5. 어떻게 할 수 있습니까?

답변:


138
>>> [int(i) for i in str(12345)]

[1, 2, 3, 4, 5]

90

배열을 문자열로 반환

>>> list(str(12345))
['1', '2', '3', '4', '5']

배열을 정수로 반환

>>> map(int,str(12345))
[1, 2, 3, 4, 5]

24
Python3에서, 그 것list(map(int,str(12345)))
서지 Stroobandt

10
[int(i) for i in str(number)]

또는 목록 이해력을 사용하지 않거나 10과 다른 기본을 사용하려는 경우

from __future__ import division # for compatibility of // between Python 2 and 3
def digits(number, base=10):
    assert number >= 0
    if number == 0:
        return [0]
    l = []
    while number > 0:
        l.append(number % base)
        number = number // base
    return l

좋은 전화, 이것은 내가 약 : 쓰기에 무슨이었다
러셀

@nd 당신이 INT처럼 INT 내부에 수의 기반을 넣을 수 있습니다 (I, 2) 바이너리에 대한 내 게시물을 참조
fabrizioM

이것은 좋은 대답이지만 사용하면 도움이 될 것입니다divmod
Shayaan

5

정수를 문자열로 바꾸지 않으려 고하므로 여기에 사용하는 함수가 있습니다.

def digitize(n, base=10):
    if n == 0:
        yield 0
    while n:
        n, d = divmod(n, base)
        yield d

예 :

tuple(digitize(123456789)) == (9, 8, 7, 6, 5, 4, 3, 2, 1)
tuple(digitize(0b1101110, 2)) == (0, 1, 1, 1, 0, 1, 1)
tuple(digitize(0x123456789ABCDEF, 16)) == (15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)

보시다시피 오른쪽에서 왼쪽으로 숫자가 생성됩니다. 왼쪽에서 오른쪽으로 숫자를 원하는 경우 시퀀스를 만든 다음 반대로해야합니다.

reversed(tuple(digitize(x)))

정수를 분할 할 때이 함수를 기본 변환에 사용할 수도 있습니다. 다음 예제는 16 진수를 튜플로 이진 니블로 분할합니다.

import itertools as it
tuple(it.zip_longest(*[digitize(0x123456789ABCDEF, 2)]*4, fillvalue=0)) == ((1, 1, 1, 1), (0, 1, 1, 1), (1, 0, 1, 1), (0, 0, 1, 1), (1, 1, 0, 1), (0, 1, 0, 1), (1, 0, 0, 1), (0, 0, 0, 1), (1, 1, 1, 0), (0, 1, 1, 0), (1, 0, 1, 0), (0, 0, 1, 0), (1, 1, 0, 0), (0, 1, 0, 0), (1, 0, 0, 0))

이 메서드는 소수를 처리하지 않지만 적용 할 수 있습니다.


3

@nd처럼 말하지만 int의 내장 함수를 사용하여 다른 기본으로 변환

>>> [ int(i,16) for i in '0123456789ABCDEF' ]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

>>> [int(i,2) for i in "100 010 110 111".split()]
[4, 2, 6, 7]

나는 최종 목표가 무엇인지 모르지만 다음 과 같은 일을하기 위해 파이썬 의 decimal 모듈 내부를 살펴보십시오.

>>> Decimal('3.1415926535') + Decimal('2.7182818285')
Decimal('5.85987')

Decimal이 질문에 대한 쓸모가
jamylak

1

하지만 list(map(int, str(x)))파이썬 방법입니다, 당신은 어떤 유형의 변환없이 파생 자리 논리를 공식화 할 수 있습니다 :

from math import log10

def digitize(x):
    n = int(log10(x))
    for i in range(n, -1, -1):
        factor = 10**i
        k = x // factor
        yield k
        x -= k * factor

res = list(digitize(5243))

[5, 2, 4, 3]

발전기의 이점 중 하나는 완벽에 먹을 수있다 set, tuple, next추가 로직없이, 등.


0

하나의 숫자를 숫자로 나누기 (모두 대답) :

>>> [int(i) for i in str(12345)]
[1, 2, 3, 4, 5]

그러나 숫자 목록에서 숫자를 얻으려면 :

>>> [int(d) for d in ''.join(str(x) for x in [12, 34, 5])]
[1, 2, 3, 4, 5]

우리가 위의 작업을 더 효율적으로 할 수 있다면 알고 싶습니다.


0

어쩌면 join+ split:

>>> a=12345
>>> list(map(int,' '.join(str(a)).split()))
[1, 2, 3, 4, 5]
>>> [int(i) for i in ' '.join(str(a)).split()]
[1, 2, 3, 4, 5]
>>> 

str.join+ str.split는 당신의 친구이며, 또한 우리 는 목록을 얻 map거나 사용 list comprehension합니다 (우리가 가입하는 것을 나누십시오 :-)).


0

문자열로 /에서 변환하지 않는 또 다른 솔루션 :

from math import log10

def decompose(n):
    if n == 0:
        return [0]
    b = int(log10(n)) + 1
    return [(n // (10 ** i)) % 10 for i in reversed(range(b))]

-2

문자열은 배열만큼 반복 가능하므로 문자열로 변환하십시오.

str(12345)

영업 욕구 int의하지 strINGS
jamylak

-2

이전 답변에 따르면 문자열은 반복 가능하므로 숫자 목록이 필요한 경우 다음을 사용하여 하나씩 추가 할 수 있습니다.

digits = []
digits += str(12345)

오류가 보이지 않습니다. 유일한 문제는 결과가 정수 목록이 아니라 문자열 목록이라는 것입니다.
Paul Rooney
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.