मैं एक चार को कैसे बढ़ा सकता हूं?


103

मैं पायथन के लिए नया हूं, जावा और सी से आ रहा हूं। मैं एक चार्ट कैसे बढ़ा सकता हूं? जावा या सी में, चार्ट और इन्ट्स व्यावहारिक रूप से विनिमेय हैं, और कुछ लूप्स में, यह मेरे लिए बहुत उपयोगी है कि मैं इंक्रीमेंट चार्ट, और इंडेक्स एरे को चार्ट द्वारा कर पाऊँ।

मैं पायथन में यह कैसे कर सकता हूं? यह काफी बुरा है (;;) लूपर के लिए एक पारंपरिक नहीं है - क्या कोई ऐसा तरीका है जिसे मैं हासिल कर सकता हूं जिसे मैं अपनी पूरी रणनीति पर पुनर्विचार किए बिना हासिल करना चाहता हूं?


4
पारंपरिक forपाश for i in range(50): do_something_with(i):। चलो, इतना बुरा नहीं है !!
जतिनवाद

@SilentGhost: मैं एंड्रॉइड ऐप में उपयोग के लिए एक अंग्रेजी शब्दकोश को विभाजित कर रहा हूं। फ़ाइल व्यक्तिगत रूप से बहुत बड़ी होने के कारण, मैंने उन्हें शब्दों में विभाजित करने के लिए पायथन स्क्रिप्ट लिखी है। उन्हें शब्दों, शब्दों, शब्दों, शब्दों आदि में विभाजित करने के लिए ... मुझे एक दूसरी स्क्रिप्ट लिखने की जरूरत है जिसमें जावा फ़ाइल को रखने के लिए Ids युक्त सरणी हो। प्रत्येक शब्द फ़ाइल के कच्चे फ़ाइल संसाधन (क्योंकि मैं आलसी हूं), और मैं इसे करने के लिए बेहतर तरीके के बारे में नहीं सोच सकता था।
टॉम आर

3
आप कुछ इस तरह लग रहे हैं[''.join(i) for i in itertools.product(string.ascii_lowercase, repeat=2)]
साइलेंटगॉस्ट

1
@SilentGhost: क्या यह सब लगता है? यदि केवल मैनुअल में कहा गया है।
टॉम आर

जवाबों:


179

पायथन 2.x में, बस ordऔर chrकार्यों का उपयोग करें :

>>> ord('c')
99
>>> ord('c') + 1
100
>>> chr(ord('c') + 1)
'd'
>>> 

बाइट्स और यूनिकोड के बीच स्पष्ट अंतर के कारण अजगर 3.x इसे अधिक संगठित और दिलचस्प बनाता है। डिफ़ॉल्ट रूप से, एक "स्ट्रिंग" यूनिकोड है, इसलिए उपरोक्त कार्य ( ordयूनिकोड वर्ण प्राप्त करता है और chrउन्हें उत्पन्न करता है)।

लेकिन अगर आप बाइट्स में रुचि रखते हैं (जैसे कि कुछ बाइनरी डेटा स्ट्रीम को संसाधित करने के लिए), चीजें और भी सरल हैं:

>>> bstr = bytes('abc', 'utf-8')
>>> bstr
b'abc'
>>> bstr[0]
97
>>> bytes([97, 98, 99])
b'abc'
>>> bytes([bstr[0] + 1, 98, 99])
b'bbc'

5
@ टॉम आर। नहीं! [पुराने दिन याद आते हैं]। जैसा कि आप जल्दी से कुछ हासिल करने या कोड का एक टुकड़ा बदलने की कोशिश कर रहे हैं, अवधारणाओं और पायथन के मुहावरे आपकी प्रगति को बाधित करने और शायद ही सीखने की अवस्था के लायक हो सकते हैं ... धैर्य रखें! आप यह भी पा सकते हैं कि पायथन में दक्षता हासिल करने से जावा (और सी, कुछ हद तक) में आपकी शैली में सुधार होगा।
mjv

एक जादू की तरह काम किया। <br> केवल वही परिवर्तन जो मैं करूंगा z के लिए, जिस स्थिति में मैंने 'a' असाइन किया है।
user45949

15

"((;)) लोफर के लिए पारंपरिक रूप से बुरा नहीं है" ?? क्या?

क्या आप करने की कोशिश कर रहे हैं?

import string
for c in string.lowercase:
    ...do something with c...

या शायद आप उपयोग कर रहे हैं string.uppercaseया string.letters?

अजगर के पास नहीं है for(;;)क्योंकि अक्सर ऐसा करने के बेहतर तरीके होते हैं। इसमें चरित्र गणित भी नहीं है क्योंकि यह आवश्यक नहीं है, या तो।


1
प्रश्न के पीछे प्रश्न का जवाब देने की कोशिश करने के लिए +1 (XY समस्या, और इसी तरह)। अगर मैं कर सकता था, तो मैं आपको और अधिक देता।
डेविन जीनपिएरे 18

धन्यवाद। मैं अक्सर पूछता हूं "क्यों?" इस तरह के सवालों के लिए। लेकिन @SilentGhost ने मुझे इसके लिए हराया।
एस.लॉट

3

मैं PHP से आया था, जहाँ आप ++ ऑपरेटर का उपयोग करके चार (A से B, Z से AA, AA से AB आदि) बढ़ा सकते हैं। मैंने एक साधारण फंक्शन किया जो पायथन में भी ऐसा ही होता है। आप जो कुछ भी करने के लिए वर्णों की सूची बदल सकते हैं (लोअरकेस, अपरकेस, आदि) आपकी आवश्यकता है।

# Increment char (a -> b, az -> ba)
def inc_char(text, chlist = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'):
    # Unique and sort
    chlist = ''.join(sorted(set(str(chlist))))
    chlen = len(chlist)
    if not chlen:
        return ''
    text = str(text)
    # Replace all chars but chlist
    text = re.sub('[^' + chlist + ']', '', text)
    if not len(text):
        return chlist[0]
    # Increment
    inc = ''
    over = False
    for i in range(1, len(text)+1):
        lchar = text[-i]
        pos = chlist.find(lchar) + 1
        if pos < chlen:
            inc = chlist[pos] + inc
            over = False
            break
        else:
            inc = chlist[0] + inc
            over = True
    if over:
        inc += chlist[0]
    result = text[0:-len(inc)] + inc
    return result

2

पैकेज ascii_lettersसे उपयोग करके चरित्र को बढ़ाने का एक तरीका है stringजो ascii_lettersएक स्ट्रिंग है जिसमें सभी अंग्रेजी वर्णमाला, अपरकेस और लोअरकेस शामिल हैं:

>>> from string import ascii_letters
>>> ascii_letters[ascii_letters.index('a') + 1]
'b'
>>> ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

इसके अलावा यह मैन्युअल रूप से किया जा सकता है;

>>> letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> letters[letters.index('c') + 1]
'd'

1

इसे जांचें: LOOP के लिए उपयोग करना

for a in range(5): x='A' val=chr(ord(x)+a) print(val)
OUTPUT: ABCBDE


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