2010-07-12 12 views
27

मेरे पास एक MySQL डेटाबेस से संलग्न वस्तुओं की एक सूची है और इसमें रिक्त स्थान हैं। मैं नीचे की जगहों को खाली करना चाहता हूं, लेकिन कोड का उपयोग कर काम नहीं करता है?पायथन: सूची ऑब्जेक्ट्स से रिक्त स्थान

hello = ['999 ',' 666 '] 

k = [] 

for i in hello: 
    str(i).replace(' ','') 
    k.append(i) 

print k 
+2

या डेटाबेस क्षेत्र ;-) – ChristopheD

+0

के प्रकार को ठीक @ChristopheD: क्या डेटाबेस "मैदान" प्रकार बलों ** प्रमुख ** रिक्त स्थान? डेवलपर और परीक्षक को ठीक करने के लिए बेहतर है। –

+1

@ जोहान माचिन: ​​मैंने दूसरी प्रविष्टि पर अग्रणी स्थान गलत किया (थोड़ा तेज, ओह) का निर्णय लिया – ChristopheD

उत्तर

63

स्ट्रिंग्स अपरिवर्तनीय हैं (जिसका अर्थ है कि उनके डाटा को संशोधित नहीं किया जा सकता है) तो की जगह विधि स्ट्रिंग संशोधित नहीं करता है - यह एक नई स्ट्रिंग देता है। आप निम्नानुसार अपना कोड ठीक कर सकते हैं:

for i in hello: 
    j = i.replace(' ','') 
    k.append(j) 

हालांकि आपके उद्देश्य को प्राप्त करने का एक बेहतर तरीका सूची समझ का उपयोग करना है।

hello = [x.strip(' ') for x in hello] 
+7

+1। -1 बदलने के लिए ('', '') –

+1

ओपी * सभी * रिक्त स्थानों को हटाना चाहता है, न केवल ट्रेलरों, बल्कि क्यों 'प्रतिस्थापन (' ',' ')' के लिए? 'स्ट्रिप' विधियों में से कोई भी नहीं, अन्य [अंतर्निहित str विधियों] (http://docs.python.org/library/stdtypes.html#string-methods) बहुत कम है, नौकरी करें (रुबे गोल्डबर्ग जैसे ' '' .join (s.split()) ')। –

+0

आह, तो यह एक ऐसा टेक्स्ट फ़ील्ड नहीं है जिसने हजारों, लाखों, आदि को अलग करने के लिए रिक्त स्थान का उपयोग किया है जिसे टेक्स्ट के रूप में परिभाषित किया गया है क्योंकि इसमें कभी-कभी कीवर्ड हो सकता है? ठीक है, मुझे याद आया। –

5

परिणाम = नक्शा (लैम्ब्डा एक्स: x.strip(), नमस्ते) पायथन में

+3

'लैम्ब्डा' का उपयोग करने की कोई आवश्यकता नहीं है; इसके बजाय आप इसका उपयोग कर सकते हैं: 'result = map (str.strip(), हैलो)'। हालांकि, जैसा कि @riza द्वारा उल्लेख किया गया है, पाइथन 3 मानचित्र में एक सूची के बजाय एक पुनरावर्तक देता है। तो सबसे अच्छा अभ्यास 'परिणाम = सूची होगा (मानचित्र (str.strip(), हैलो)) '। – amicitas

+1

ध्यान दें कि (कम से कम पायथन 3 में) आपको 'नक्शा (str.strip, mylist) 'map नहीं होना चाहिए (str.strip(), mylist)'। स्ट्रिप के लिए – William

2

स्ट्रिंग पद्धति में सुधार किया स्ट्रिंग लौटाने: उदाहरण के लिए निम्नलिखित कोड अग्रणी और strip का उपयोग कर सूची में हर स्ट्रिंग से पीछे के स्पेस को हटा।

k = [x.replace(' ', '') for x in hello] 
0

प्रतिस्थापित() स्थानांतरित नहीं होता है, तो आपको इसके परिणाम को कुछ असाइन करने की आवश्यकता है। hello_no_spaces = map(lambda x: x.replace(' ', ''), hello)

1

यह मानकर कि आप आंतरिक रिक्त स्थान को हटाने के लिए नहीं करना चाहती:

def normalize_space(s): 
    """Return s stripped of leading/trailing whitespace 
    and with internal runs of whitespace replaced by a single SPACE""" 
    # This should be a str method :-(
    return ' '.join(s.split()) 

replacement = [normalize_space(i) for i in hello] 
6

सूची समझ [num.strip() for num in hello] सबसे तेज है इसके अलावा, अधिक संक्षिप्त वाक्य रचना के लिए, आप अपने पाश के लिए एक एक लाइनर के साथ प्रतिस्थापित कर सकता है ।

>>> import timeit 
>>> hello = ['999 ',' 666 '] 

>>> t1 = lambda: map(str.strip, hello) 
>>> timeit.timeit(t1) 
1.825870468015296 

>>> t2 = lambda: list(map(str.strip, hello)) 
>>> timeit.timeit(t2) 
2.2825958750515269 

>>> t3 = lambda: [num.strip() for num in hello] 
>>> timeit.timeit(t3) 
1.4320335103944899 

>>> t4 = lambda: [num.replace(' ', '') for num in hello] 
>>> timeit.timeit(t4) 
1.7670568718943969 
+0

'सूची (नक्शा (str.strip, हैलो))' नक्शा 'एक सूची स्वयं लौटने के बाद से पूरी तरह से समझ में नहीं आता है। – ChristopheD

+1

@ क्रिस्टोफेड: पायथन 3 में, मानचित्र एक सूची नहीं लौटाता है। – riza

0
for element in range(0,len(hello)): 
     d[element] = hello[element].strip() 
+2

अपने कोड के अलावा, कृपया बताएं कि आपका उत्तर क्यों काम करता है और यह समस्या को हल करता है। – buczek

संबंधित मुद्दे