पायथन में वर्णमाला में अक्षरों को कैसे छाँटना है


157

क्या पायथन में वर्णमाला में अक्षरों को क्रमबद्ध करने का एक आसान तरीका है?

के लिए:

a = 'ZENOVW'

मैं लौटना चाहूंगा:

'ENOVWZ'

जवाबों:


276

तुम कर सकते हो:

>>> a = 'ZENOVW'
>>> ''.join(sorted(a))
'ENOVWZ'

ध्यान दें कि sorted(a)एक सॉर्ट की गई सूची वापस आ जाएगी, इसलिए स्ट्रिंग तुलना के लिए आपको इसकी आवश्यकता नहीं है join()(नीचे देखें आंसरशीट का उत्तर देखें)।
स्किप्पी ले ग्रैंड गौरू

ध्यान दें कि ''.join(sorted(a, reverse=True, key=str.lower))एक उल्टे मामले-असंवेदनशील प्रकार को करने के लिए उपयोग किया जा सकता है। काम हो सकता है।
Superdooperhero

89
>>> a = 'ZENOVW'
>>> b = sorted(a)
>>> print b
['E', 'N', 'O', 'V', 'W', 'Z']

sortedएक सूची देता है, ताकि आप इसे फिर से उपयोग करके एक स्ट्रिंग बना सकें join:

>>> c = ''.join(b)

जो प्रत्येक आइटम के बीच में bएक खाली स्ट्रिंग के साथ मिलकर वस्तुओं को जोड़ता है ''

>>> print c
'ENOVWZ'

31

क्रमबद्ध () समाधान आपको अन्य तारों के साथ कुछ अप्रत्याशित परिणाम दे सकता है।

अन्य समाधानों की सूची:

अक्षरों को क्रमबद्ध करें और उन्हें अलग करें:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(set(s.lower())))
' belou'

अक्षरों को क्रमबद्ध करें और उन्हें कैप रखते हुए अलग बनाएं:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(set(s)))
' Bbelou'

अक्षरों को क्रमबद्ध करें और डुप्लिकेट रखें:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(s))
' BBbbbbeellou'

यदि आप परिणाम में स्थान खाली करना चाहते हैं, तो उन उल्लिखित मामलों में से किसी में पट्टी () फ़ंक्शन जोड़ें:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(set(s.lower()))).strip()
'belou'

अरे, वह पहला समाधान थोड़े होमवर्क के एक टुकड़े के लिए उपयोगी था, जिसमें मुझे बायसेक्शन का उपयोग करके एक पत्र ढूंढना था। हां, मैं पहले से ही स्ट्रिंग क्लास और खोज () विधि के बारे में जानता हूं, लेकिन यह अभ्यास के उद्देश्य को हरा देता है;)
रनलेवेल0

9

आप कम उपयोग कर सकते हैं

>>> a = 'ZENOVW'
>>> reduce(lambda x,y: x+y, sorted(a))
'ENOVWZ'

7

पायथन फ़ंक्शन sortedस्ट्रिंग के लिए ASCII आधारित परिणाम देता है।

प्रोत्साहन : नीचे दिए गए उदाहरण में, eऔर dपीछे है Hऔर Wयह ASCII मूल्य के कारण है।

>>>a = "Hello World!"
>>>"".join(sorted(a))
' !!HWdellloor'

सही : पत्र के मामले को बदलने के बिना क्रमबद्ध स्ट्रिंग लिखने के लिए । कोड का उपयोग करें:

>>> a = "Hello World!"
>>> "".join(sorted(a,key=lambda x:x.lower()))
' !deHllloorW'

यदि आप सभी विराम चिह्नों और संख्याओं को हटाना चाहते हैं। कोड का उपयोग करें:

>>> a = "Hello World!"
>>> "".join(filter(lambda x:x.isalpha(), sorted(a,key=lambda x:x.lower())))
'deHllloorW'

3

अजगर के किसी भी इनबिल्ट फ़ंक्शन का उपयोग किए बिना कोड को वर्णमाला क्रम में स्ट्रिंग को सॉर्ट करने के लिए इस्तेमाल किया जा सकता है

k = इनपुट ("किसी भी स्ट्रिंग को फिर से दर्ज करें")

li = []
x = len(k)
for i in range (0,x):
    li.append(k[i])

print("List is : ",li)


for i in range(0,x):
    for j in range(0,x):
        if li[i]<li[j]:
            temp = li[i]
            li[i]=li[j]
            li[j]=temp
j=""

for i in range(0,x):
    j = j+li[i]

print("After sorting String is : ",j)

1
आदर्श रूप से आप यह स्पष्ट करने के लिए कोड में कुछ स्पष्टीकरण जोड़ना चाहते हैं कि यह क्या करता है। एसओ में आपका स्वागत है!
जिस्टरफ़रज़ 007

1

वास्तव में कम () फ़ंक्शन के साथ जवाब पसंद आया। संचित () का उपयोग करके स्ट्रिंग को क्रमबद्ध करने का एक और तरीका है।

from itertools import accumulate
s = 'mississippi'
print(tuple(accumulate(sorted(s)))[-1])

सॉर्ट किए गए (s) -> ['i', 'i', 'i', 'i', 'm', 'p', 'p', 's', 's', 's', 's' ]

tuple (संचित (सॉर्ट किया हुआ)) -> ('i', 'ii', 'iii', 'iiii', 'iiiim', 'iiiimp', 'iiiimpp', 'iiiimpps', 'iiiimppss', 'iiiimppsss) ',' iiiimppssss ')

हम टपल के अंतिम सूचकांक (-1) का चयन कर रहे हैं


अपने पहले जवाब के लिए अच्छा किया। बस 1 मिलियन वर्णों की एक स्ट्रिंग पर विचार करें, आपकी ट्यूपल () कमांड संचित विकल्पों की एक विशाल सूची बनाएगी जो अनावश्यक रूप से बड़ी मात्रा में मेमोरी का उपयोग करती है।
टीडी

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