मान लें कि मेरे पास निम्न स्ट्रिंग है:

A12B2C6

और मैं एक वेक्टर के लिए अंक और दूसरे के लिए वर्ण निकालना चाहता हूं ताकि आउटपुट हो:

['12', '2', '6']
['A', 'B', 'C']

मैंने निम्नलिखित कोड के साथ ऐसा करने की कोशिश की:

string = input()
digits = []
characters = []
for c in range(len(string)-1):
    if string[c].isdigit():
        if string[c].isdigit() and string[c + 1].isdigit():
            digits.append(string[c] + string[c + 1])
        else:
            digits.append(string[c])
    else:
        characters.append(string[c])

print(digits)
print(characters)

लेकिन निकास किया जा रहा है:

['12', '2', '2']
['A', 'B', 'C']
1
Vinicius Vasconcelos 7 फरवरी 2021, 03:09

3 जवाब

सबसे बढ़िया उत्तर

आपके कोड में दो समस्याएं हैं:

  1. आप दो अंकों की संख्या को दो बार संसाधित करते हैं। जब c == 1 आप 12 जोड़ते हैं, और जब c == 2 आप 2 जोड़ते हैं। यह वास्तव में अंकों की नकल नहीं कर रहा है; यह केवल एक संयोग है कि B के बाद 2, 12 में A के बाद 2 के समान है।
  2. for c in range(len(string)-1): का अर्थ है कि आप स्ट्रिंग में अंतिम वर्ण को कभी भी संसाधित नहीं करते हैं; इसलिए परिणाम में कोई 6 नहीं है। यह range(len(string)) होना चाहिए, लेकिन फिर आपको c == len(string)-1 को विशेष रूप से संभालना होगा ताकि आप string[c+1] का उपयोग करने का प्रयास न करें।

आप पहली समस्या को for के बजाय while लूप का उपयोग करके हल कर सकते हैं, ताकि जब आप 2-अंकीय संख्या संसाधित करते हैं तो आप c को दो बार बढ़ा सकते हैं।

लेकिन नियमित अभिव्यक्तियों के साथ इसे करना आसान है:

import re

digits = re.findall(r'\d+', string)
characters = re.findall(r'\D', string)
2
Barmar 7 फरवरी 2021, 04:40

दूसरों ने इस मुद्दे की ओर इशारा किया है, लेकिन यहां एक कार्यान्वयन है जो सही परिणाम देना चाहिए।

संपादित करें: मुझे लगता है कि डाउन वोट उन लोगों से हैं जो रेगेक्स समाधान पसंद करते हैं। रेगेक्स समाधान बहुत अच्छा है, लेकिन ओपी को कुछ ऐसा देखने में दिलचस्पी हो सकती है जो उनके प्रयास के समान ही काम करता हो।

string = input()

digits = []
characters = []
current_digit = ""

for c in string:
    if c.isdigit():
        current_digit += c
    else:
        # Non-digits signal the end of the current digit
        if current_digit:
            digits.append(current_digit)
            current_digit = ""
        
        characters.append(c)

# May need to "flush" the current digit if at end of string
if current_digit:
    digits.append(current_digit)

print(digits)
print(characters)
0
rhurwitz 7 फरवरी 2021, 03:39

ऐसा कुछ आपके कोड से काम करेगा:

text = input()
digits = []
characters = []
for char in text:
    if char.isdigit() and not char in digits:
        digits.append(char)
    elif not char.isdigit() and not char in characters:
        characters.append(char)
print(digits)
print(characters)

आप डुप्लिकेट को हटाने के लिए सेट () का भी उपयोग कर सकते हैं

-2
Wis124 7 फरवरी 2021, 03:23