2011-12-24 1 views
43

में खाली नहीं होने पर एकाधिक तारों में शामिल होना मेरे पास चार तार हैं और उनमें से कोई भी खाली हो सकता है। मुझे उनके बीच की जगहों के साथ एक स्ट्रिंग में शामिल होने की आवश्यकता है। अगर मैं का उपयोग करें:पाइथन

new_string = string1 + ' ' + string2 + ' ' + string3 + ' ' + string4 

परिणाम नई स्ट्रिंग की शुरुआत पर एक रिक्त स्थान है, तो string1 खाली है। इसके अलावा, मेरे पास 0 रिकवरी रिक्त स्थान हैं यदि string2 और string3 खाली हैं।

मुझे उनकी आवश्यकता नहीं होने पर रिक्त स्थान के बिना आसानी से उनसे कैसे जुड़ सकता है?

उत्तर

100
>>> strings = ['foo','','bar','moo'] 
>>> ' '.join(filter(None, strings)) 
'foo bar moo' 

filter() कॉल में None का उपयोग करके, यह सब falsy तत्वों को हटा।

-2
strings = ['foo','','bar','moo'] 
' '.join([x for x in strings if x is not '']) 
'foo bar moo' 
+4

'' नहीं 'के बजाय बेहतर उपयोग '! =' है। यह काम कर सकता है, लेकिन इसकी गारंटी नहीं है। या बस 'x के लिए x में x के लिए x का उपयोग करें] x। –

+5

** गैर-सिंगलेट्स के लिए कभी भी 'नहीं' का उपयोग करें यदि आप वास्तव में यह जांचना नहीं चाहते हैं कि दोनों एक ही वस्तुएं हैं या नहीं! – ThiefMaster

9

आप जानते हैं कि तार कोई प्रमुख/पिछली श्वेत रिक्ति है, तो:

>>> strings = ['foo','','bar','moo'] 
>>> ' '.join(x for x in strings if x) 
'foo bar moo' 

अन्यथा:

>>> strings = ['foo ','',' bar', ' ', 'moo'] 
>>> ' '.join(x.strip() for x in strings if x.strip()) 
'foo bar moo' 

और अगर तार के किसी भी गैर-प्रमुख/पिछली श्वेत रिक्ति है, आपको अभी भी कड़ी मेहनत करने की आवश्यकता हो सकती है। कृपया स्पष्ट करें कि वास्तव में आपके पास क्या है।

+0

स्ट्रिंग्स इनपुट टेक्स्ट फ़ील्ड्स से आती हैं, इसलिए सबकुछ संभव है। धन्यवाद! – Goran