मामले को अनदेखा करें मामले को अनदेखा करते हुए पायथन में स्ट्रिंग की तुलना करने का सबसे आसान तरीका क्या है?पायथन स्ट्रिंग्स
बेशक कोई भी कर सकता है (str1.lower() < = str2.lower()), लेकिन इससे दो अतिरिक्त अस्थायी तार (स्पष्ट आवंटन/जी-सी ओवरहेड के साथ) बनाया गया।
मुझे लगता है कि मैं सी के stricmp() के बराबर की तलाश में हूं।
[कुछ और संदर्भ अनुरोध किया, तो मैं एक छोटी सी उदाहरण के साथ प्रदर्शित होगी:]
मान लीजिए आप तार के एक looong सूची क्रमबद्ध करना चाहते हैं। आप बस theist.sort() करते हैं। यह ओ (एन * लॉग (एन)) स्ट्रिंग तुलना और कोई मेमोरी प्रबंधन नहीं है (क्योंकि सभी तार और सूची तत्व कुछ प्रकार के स्मार्ट पॉइंटर्स हैं)। तुम खुश हो।
अब, आप ऐसा करना चाहते हैं, लेकिन मामले को अनदेखा करें (चलो सरल बनाएं और कहें सभी तार एसीआईआई हैं, इसलिए स्थानीय मुद्दों को अनदेखा किया जा सकता है)। आपList.sort (key = lambda s: s.lower()) कर सकते हैं, लेकिन फिर आप प्रति तुलना दो नए आवंटन का कारण बनते हैं, साथ ही डुप्लिकेट (निम्न) स्ट्रिंग्स के साथ कचरा-कलेक्टर बोझ करते हैं। प्रत्येक ऐसे मेमोरी-प्रबंधन शोर ऑर्डर-ऑफ-परिमाण सरल स्ट्रिंग तुलना की तुलना में धीमी है।
अब, एक जगह में stricmp() - जैसे फ़ंक्शन के साथ, आप करते हैं: theList.sort (cmp = stricmp) और यह जितना तेज़ और स्मृति-अनुकूल है list.sort() के रूप में। आप फिर से खुश हैं
समस्या किसी भी पायथन आधारित केस-असंवेदनशील तुलना में अंतर्निहित स्ट्रिंग डुप्लीकेट शामिल है, इसलिए मुझे सी-आधारित तुलना (शायद मॉड्यूल स्ट्रिंग में) खोजने की उम्मीद थी।
ऐसा कुछ भी नहीं मिला, इसलिए सवाल यहां है। (उम्मीद है कि यह प्रश्न स्पष्ट करता है)।
Php समतुल्य: strcasecmp - http://nl3.php.net/strcasecmp – fijter
अपनी मान्यताओं गलत हैं। list.sort() एक कुंजी = _ _ot_ मतलब "प्रति तुलना दो नए आवंटन" है। (cmp = के साथ list.sort, दूसरी तरफ _does_ प्रत्येक तुलना के लिए तर्क को कॉल करें) – hop
ने 'पायथन स्ट्रिंग्स में अनदेखा केस' से प्रश्न का नाम बदलने का प्रयास किया है, जो कि 7-बिट एसीआई स्ट्रिंग तुलना के लिए पायथन में स्ट्रीकंप के निकटतम है ओप के वास्तविक प्रश्न को अधिक सटीक रूप से प्रतिबिंबित करने के लिए। मुख्य समस्या: यूनिकोड भी 'स्ट्रिंग' है लेकिन यह प्रश्न उन्हें * पूरी तरह से * गलत मिलेगा; tchrist – n611x007