2012-12-01 20 views
9

मैं एक साथ रख दिया निम्नलिखित कोड की जाँच करने के लिए यदि एक स्ट्रिंग/शब्द वर्णानुक्रम में वर्णमाला के क्रम में है:पता चल सके कि एक स्ट्रिंग अजगर

def isInAlphabeticalOrder(word): 
    word1=sorted(word) 
    word2=[] 
    for i in word: 
     word2.append(i) 
    if word2 == word1: 
     return True 
    else: 
     return False 

लेकिन मैं की तरह वहाँ एक और अधिक कारगर तरीका होना चाहिए लग रहा है (कोड की कम लाइनें) स्ट्रिंग्स को स्ट्रिंग में बदलने के अलावा अन्य की जांच करें। क्या प्रत्येक char को सूची में बदलने के बिना वर्णमाला को तारों को क्रमबद्ध करने के लिए कोई ऑपरेंड नहीं है? क्या कोई और अधिक कुशल तरीका सुझा सकता है?

+0

पाव Ametvic आप समझते क्या ** 'एबीसी डीईएफ़' ** और ** 'एबीसी!= ghu '** वर्णानुक्रम से आदेश दिया गया है या नहीं? – eyquem

उत्तर

12

यह हे होने का लाभ है

return all((str.lower(word[i+1]) >= str.lower(word[i]) for i in range(len(word) - 1))) 
3

आप इस तरह अपने कार्य में generator उपयोग कर सकते हैं: -

def isInAlphabeticalOrder(word): 
    return all((word[i+1] >= word[i] for i in range(len(word) - 1))) 

जनरेटर दी गई श्रेणी से i के प्रत्येक मान हो जाता है, और पिछले सूचकांक में से एक के साथ कि सूचकांक में चरित्र की तुलना करें। और सभी तुलना परिणाम all फ़ंक्शन पर पास किए जाते हैं, जो True लौटाएंगे यदि सभी मान True हैं।

>>> def isInAlphabeticalOrder(word): 
     return all((word[i+1] >= word[i] for i in range(len(word) - 1))) 

>>> isInAlphabeticalOrder("rohit") 
False 
>>> isInAlphabeticalOrder("aabc") 
True 
>>> isInAlphabeticalOrder("abc") 
True 

पाठ्यक्रम कि case-insensitivity पर विचार नहीं करता की

। आप इसे पर विचार करना चाहते हैं, तो वापसी कथन को बदलने के लिए: -:

def isInAlphabeticalOrder(word): 
    return word==''.join(sorted(word)) 

>>> isInAlphabeticalOrder('abc') 
True 
>>> isInAlphabeticalOrder('acb')  
False 
+0

एस्ट्रोफ़ेस के बारे में क्या, उदा। 'नहीं' में? – DSM

+0

@DSM .. उस मामले को संभाला। –

+0

@DSM। असल में यह ठीक से संभाला नहीं जा रहा था। हटा दिया। मुझे लगता है कि इसके लिए हमें लूप के लिए लिखना होगा। –

12

यह यह करने के लिए एक सरल (और अजगर मुहावरेदार) तरीका है (एन) (एक स्ट्रिंग को सॉर्ट करना ओ (एन लॉग एन) है)। पाइथन में एक वर्ण (या स्ट्रिंग) किसी अन्य वर्ण से "कम" होता है यदि यह वर्णमाला क्रम में इससे पहले आता है, ताकि यह देखने के लिए कि कोई स्ट्रिंग वर्णक्रमानुसार क्रम में है या नहीं, हमें केवल आसन्न वर्णों की प्रत्येक जोड़ी की तुलना करने की आवश्यकता है। साथ ही, ध्यान दें कि आप रेंज (लेन (शब्द) - 1) की बजाय सीमा (लेन (शब्द)) लेते हैं क्योंकि अन्यथा आप लूप के अंतिम पुनरावृत्ति पर स्ट्रिंग की सीमाओं को ओवरस्टेप कर देंगे।

def isInAlphabeticalOrder(word): 
    for i in range(len(word) - 1): 
     if word[i] > word[i + 1]: 
      return False 
    return True 
+0

वाह, यह बहुत अच्छा है। लेकिन, मुझे लगता है कि ओपी एक प्रोग्रामिंग छात्र है, जिसे लूपिंग के साथ पेश किया जा रहा है। यदि यह सच है, तो चीजों को इस तरह से करना लूप्स को समझने के लिए अनुकूल नहीं होगा। :) – kreativitea

+0

@ क्रिएटिवेटा: शायद। लेकिन मुझे लगता है कि एक छात्र के लिए चुनी गई भाषा के मुहावरे सीखना भी महत्वपूर्ण है। यह पायथन में ऐसा करने के लिए एक बहुत ही मूर्ख तरीका है। यदि भाषा सी थी, तो लूपिंग या लाइब्रेरी रास्ता है ... –

+4

मुझे यह पसंद है: 'सूची (शब्द) == क्रमबद्ध (शब्द) ' – kreativitea

3

एक एक लाइनर के रूप में इस प्रयास करें,:

all(x <= y for x, y in zip(word, word[1:])) 
0

कार्यक्रम सच वापस आ जाएगी अगर शब्द वर्णानुक्रम व्यवस्था की या गलत है अन्यथा। दूसरा तर्क wordlist कोई भी कार्यक्रम अर्थ किसी भी शब्द है कि आप नंबर सहित में डाल के लिए जाँच करेगा करने के लिए आरंभ नहीं हो जाता:

def isAlphabeticalOrder(word, wordList = None): 
if (len(word) > 0): 
    curr = word[0] 
for letter in word: 
    if (curr > letter): 
     return False 
    else: 
     curr = letter 
if wordList is None: 
    return True 
return word in wordList 
0

कई जवाब पहले से ही वास्तविक स्ट्रिंग तुलना संबोधित किया है। लेकिन मैं आपके रिटर्न तर्क के बारे में कुछ जोड़ना चाहता हूं।

यह आम बात है शुरुआती लिखने के लिए कोड की तरह: पहले यह रूप में पढ़ता है पर कि कोड मतलब नहीं है

return something == somethingElse 

हैं:

if something == somethingElse: 
    return True 
else: 
    return False 

कि कोड हमेशा इस तरह सरल किया जा सकता , "किसी चीज़ से कुछ तुलना करें, और तुलना के परिणाम को वापस करें"।

1

यह सबसे आसान है:

def alphabetical(word): 
    return list(word) == sorted(word) 
संबंधित मुद्दे