2016-05-22 3 views
21

मेरे पास स्ट्रिंग्स set1 का एक सेट है, और set1 में सभी स्ट्रिंग्स में दो विशिष्ट सबस्ट्रिंग्स हैं जिनकी मुझे आवश्यकता नहीं है और उन्हें हटाना है।
नमूना इनपुट: set1={'Apple.good','Orange.good','Pear.bad','Pear.good','Banana.bad','Potato.bad'}
तो बुनियादी तौर पर मैं सभी स्ट्रिंग्स से हटा .good और .bad सबस्ट्रिंग चाहते हैं।
मैं क्या करने की कोशिश की:पायथन में स्ट्रिंग्स के सेट से विशिष्ट सबस्ट्रिंग को कैसे निकालें?

for x in set1: 
    x.replace('.good','') 
    x.replace('.bad','') 

लेकिन इस सब पर काम करने के लिए प्रतीत नहीं होता। आउटपुट में बिल्कुल कोई बदलाव नहीं है और यह इनपुट के समान है। मैंने मूल के बजाय for x in list(set1) का उपयोग करने का प्रयास किया लेकिन यह कुछ भी नहीं बदलेगा।

उत्तर

24

स्ट्रिंग्स अपरिवर्तनीय हैं। string.replaceनया स्ट्रिंग बनाता है। इस दस्तावेज में कहा गया है:

वापसी स्ट्रिंग रों की एक प्रतिलिपि सबस्ट्रिंग वर्ष नए द्वारा प्रतिस्थापित की सभी घटनाओं के साथ। ...

इसका मतलब है आप सेट फिर से आवंटित करने के लिए या इसे फिर से पॉप्युलेट है (पुन: बँटवारा set comprehension) साथ आसान है:

new_set = {x.replace('.good', '').replace('.bad', '') for x in set1} 
8
>>> x = 'Pear.good' 
>>> y = x.replace('.good','') 
>>> y 
'Pear' 
>>> x 
'Pear.good' 

.replace यह प्रतिस्थापन के साथ स्ट्रिंग की एक प्रतिलिपि रिटर्न नहीं परिवर्तन स्ट्रिंग करता है,। आप स्ट्रिंग को सीधे नहीं बदल सकते हैं क्योंकि तार अपरिवर्तनीय हैं।

आपको x.replace से वापसी मूल्यों को लेने और उन्हें एक नए सेट में रखने की आवश्यकता है।

+0

लेकिन जब मैं तार के उस समूह पर पाश, मैं कैसे एक नया सेट अद्यतन कर सकते हैं? set_name.update का उपयोग कर? क्या आप इसे दिखा सकते हैं? – controlfreak

5

आप ऐसा कर सकता है:

import re 
import string 
set1={'Apple.good','Orange.good','Pear.bad','Pear.good','Banana.bad','Potato.bad'} 

for x in set1: 
    x.replace('.good',' ') 
    x.replace('.bad',' ') 
    x = re.sub('\.good$', '', x) 
    x = re.sub('\.bad$', '', x) 
    print(x) 
+0

लाइन 'x.replace ('। Good', '') 'और' x.replace (' bad ',' ')' अंतिम परिणाम के लिए कुछ भी नहीं करता है। प्रिंट आउट उनके बिना समान होगा। –

+0

इसके अलावा मेरे पास 're.sub' के साथ सिर्फ एक पंक्ति होगी, जैसे:' x = re.sub ('((\। Good $) | (\। Bad $))', '' x) '' –

1

मैं परीक्षण किया (लेकिन यह अपने उदाहरण नहीं है) और डेटा उन्हें वापस नहीं करता है अर्दली या पूर्ण

>>> ind = ['p5','p1','p8','p4','p2','p8'] 
>>> newind = {x.replace('p','') for x in ind} 
>>> newind 
{'1', '2', '8', '5', '4'} 

मैं साबित कर दिया कि इस काम करता है:

>>> ind = ['p5','p1','p8','p4','p2','p8'] 
>>> newind = [x.replace('p','') for x in ind] 
>>> newind 
['5', '1', '8', '4', '2', '8'] 

या

>>> newind = [] 
>>> ind = ['p5','p1','p8','p4','p2','p8'] 
>>> for x in ind: 
...  newind.append(x.replace('p','')) 
>>> newind 
['5', '1', '8', '4', '2', '8'] 
संबंधित मुद्दे