पायथन में विभाजन पूर्णांक?


87

मेरा पूर्णांक इनपुट माना जाता है 12345, मैं विभाजित करना चाहता हूं और इसे एक सरणी में डाल सकता हूं 1, 2, 3, 4, 5। मैं इसे कैसे कर पाऊंगा?

जवाबों:



91

स्ट्रिंग के रूप में सरणी लौटें

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

पूर्णांक के रूप में सरणी लौटें

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

24
पायथन 3 में, वह होगाlist(map(int,str(12345)))
— सर्ज स्ट्रोबोबांट 20

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

अच्छा फोन, यह वही था जो मैं लिखने वाला था :)
— रसेल

@ और आप बाइनरी के लिए इंट के अंदर संख्या का आधार (i, 2) डाल सकते हैं मेरी पोस्ट देखें
— fabrizioM

यह एक अच्छा उत्तर है, लेकिन divmod
— Shayan

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)))

आप इस फ़ंक्शन का उपयोग आधार रूपांतरण के लिए भी कर सकते हैं क्योंकि आप पूर्णांक को विभाजित करते हैं। निम्न उदाहरण एक हेक्साडेसिमल संख्या को बाइनरी निबल्स में ट्यूपल्स के रूप में विभाजित करता है:

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

@ और कहते हैं, लेकिन बिल्ट-इन फ़ंक्शन का उपयोग करके किसी भिन्न आधार में कनवर्ट करने के लिए

>>> [ 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('3.1415926535') + Decimal('2.7182818285')
Decimal('5.85987')

Decimalइस सवाल के लिए बेकार है
— जामिलाक

1

जबकि list(map(int, str(x)))pythonic दृष्टिकोण है, तो आप किसी भी प्रकार के रूपांतरण के बिना प्राप्त अंकों के तर्क तैयार कर सकते हैं:

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)

ओपी ings intनहीं चाहता strहै
— जमालिक

-2

पिछले उत्तरों के अनुसार, तार चलने योग्य हैं, इसलिए यदि आपको अपने अंकों की सूची की आवश्यकता है, तो आप इसे एक के बाद एक करके जोड़ सकते हैं:

digits = []
digits += str(12345)

मुझे कोई त्रुटि नहीं दिख रही है। केवल मुद्दा यह है कि परिणाम स्ट्रिंग्स की एक सूची है, न कि किलों की सूची।
— पॉल रूनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.