के कुछ उचित मान्यताओं करते हैं:
(1) आप वास्तव में एक भी स्थान के साथ खाली स्थान के वर्णों के किसी भी रन बदलना चाहते हैं (एक रन लंबाई 1 या अधिक से अधिक है)।
(2) आप एक ही कोड को पायथन 2.X के तहत यूनिकोड ऑब्जेक्ट्स के साथ न्यूनतम परिवर्तनों के साथ काम करना चाहते हैं।
(3) आप चीजें हैं जो डॉक्स
में गारंटी नहीं दी जाती ग्रहण करने के लिए अपने कोड नहीं करना चाहते
(4) आप अजगर 3.X str वस्तुओं के साथ कम से कम परिवर्तन के साथ काम करने के लिए एक ही कोड चाहते हैं।
वर्तमान में चयनित जवाब इन समस्याओं है:
(क) " " * 3
" " * 2
अर्थात, आदि रिक्त स्थान के लिए यह डुप्लिकेट रिक्त स्थान निकाल देता है लेकिन तीन प्रतियों नहीं, चार प्रतियों बदल जाता है।[विफल रहता आवश्यकता 1]
(ख) में परिवर्तन "foo\tbar\tzot"
"foobarzot"
करने के लिए [विफल रहता आवश्यकता 1]
(ग) जब एक यूनिकोड वस्तु खिलाया, हो जाता है TypeError: translate() takes exactly one argument (2 given)
[विफल रहता आवश्यकता 2]
(घ) string.whitespace[:-1]
का उपयोग करता है [आवश्यकता 3 विफल रहता है; string.whitespace में वर्णों का क्रम गारंटी नहीं है]
(ई) string.whitespace[:-1]
का उपयोग करता है [आवश्यकता 4 विफल रहता है; पायथन 2.X में, string.whitespace '\t\n\x0b\x0c\r '
है; पायथन 3.X में, यह '\ t \ n \ r \ x0b \ x0c']
" ".join(s.split())
उत्तर और re.sub(r"\s+", " ", s)
उत्तर इन समस्याओं को नहीं है।
स्रोत
2009-12-14 10:09:26
यह मेरे समाधान से बेहद बेहतर है। मैं भी एक दिन अमर बनने की उम्मीद करता हूं। –
वाह। बहुत शानदार है। मैं जो कर रहा हूं उसके लिए बिल्कुल सही, क्योंकि वे छोटे तार हैं। मुझे आश्चर्य है कि यह बड़े डेटासेट पर कैसे प्रदर्शन करेगा? यह बहुत अच्छा होगा अगर कोई जानता है कि यह आंतरिक रूप से कैसे काम करता है :) – Alex
धन्यवाद, व्हाइटस्पेस के रनों के लिए कोई तर्क नहीं करने के बारे में पता नहीं था। विशाल !! – MattoTodd