जैसा कि अज़ीज़ ऑल्टो द्वारा रिपोर्ट किया गया है कि filter(None, lstr)
एक जगह के साथ खाली तारों को नहीं हटाया जाता है, ' '
लेकिन अगर आपको यकीन है कि लस्ट में केवल स्ट्रिंग है जिसका आप उपयोग कर सकते हैंfilter(str.strip, lstr)
>>> lstr = ['hello', '', ' ', 'world', ' ']
>>> lstr
['hello', '', ' ', 'world', ' ']
>>> ' '.join(lstr).split()
['hello', 'world']
>>> filter(str.strip, lstr)
['hello', 'world']
मेरे पीसी पर समय की तुलना करें
>>> from timeit import timeit
>>> timeit('" ".join(lstr).split()', "lstr=['hello', '', ' ', 'world', ' ']", number=10000000)
3.356455087661743
>>> timeit('filter(str.strip, lstr)', "lstr=['hello', '', ' ', 'world', ' ']", number=10000000)
5.276503801345825
''
एक स्थान के साथ तारों को हटाने और खाली करने का सबसे तेज़ समाधान ' '
बना हुआ है ' '.join(lstr).split()
।
जैसा कि एक टिप्पणी में बताया गया है कि स्थिति अलग है अगर आपके तार में रिक्त स्थान हैं।
>>> lstr = ['hello', '', ' ', 'world', ' ', 'see you']
>>> lstr
['hello', '', ' ', 'world', ' ', 'see you']
>>> ' '.join(lstr).split()
['hello', 'world', 'see', 'you']
>>> filter(str.strip, lstr)
['hello', 'world', 'see you']
आप देख सकते हैं कि उस filter(str.strip, lstr)
पर रिक्त स्थान के साथ तार संरक्षित है लेकिन ' '.join(lstr).split()
इस तार को विभाजित करेगा।
for x in list
यदि आप उपयोग कर रहे हैं तो आपwhile loop
ठीक हैं। प्रदर्शित लूप खाली तारों को हटा देगा, जब तक कि अधिक खाली तार न हों और फिर रुक जाएं। मैंने वास्तव में प्रश्न (सिर्फ शीर्षक) पर ध्यान नहीं दिया था, लेकिन मैंने सटीक लूप के साथ एक संभावना के रूप में उत्तर दिया था! यदि आप स्मृति के लिए समझ या फ़िल्टर का उपयोग नहीं करना चाहते हैं, तो यह एक बहुत ही पायथोनिक समाधान है।