अपनी सूची कंप्यूटर अनुप्रयोग पट्टी का उपयोग करना दो बार कहा जाता है, एक बार एक जनरल exp उपयोग करें यदि आप केवल कॉल पट्टी करना चाहते हैं और समझ रखें:
input_list[:] = [x for x in (s.strip() for s in input_list) if x]
इनपुट:
input_list = [' \n ',' data1\n ',' data2\n',' \n','data3\n']
आउटपुट:
['data1', 'data2', 'data3']
input_list[:]
मूल सूची को बदल देगा जो आप चाहते हैं कि हो सकता है या नहीं, यदि आप वास्तव में एक नई सूची बनाना चाहते हैं तो बस cleaned_up_list = ...
का उपयोग करें।
मैं हमेशा जनरेटर के बजाय अजगर 3 में अजगर 2 में itertools.imap
और map
का उपयोग कर बड़ा आदानों के लिए सबसे कारगर हो पाया:
from itertools import imap
input_list[:] = [x for x in imap(str.strip, input_list) if x]
अलग दृष्टिकोण के साथ कुछ समय:
In [17]: input_list = [choice(input_list) for _ in range(1000000)]
In [19]: timeit filter(None, imap(str.strip, input_list))
10 loops, best of 3: 115 ms per loop
In [20]: timeit list(ifilter(None,imap(str.strip,input_list)))
10 loops, best of 3: 110 ms per loop
In [21]: timeit [x for x in imap(str.strip,input_list) if x]
10 loops, best of 3: 125 ms per loop
In [22]: timeit [x for x in (s.strip() for s in input_list) if x]
10 loops, best of 3: 145 ms per loop
In [23]: timeit [data.strip() for data in input_list if data.strip()]
10 loops, best of 3: 160 ms per loop
In [24]: %%timeit
....: cleaned_up_list = []
....: for data in input_list:
....: clean_data = data.strip()
....: if clean_data:
....: cleaned_up_list.append(clean_data)
....:
10 loops, best of 3: 150 ms per loop
In [25]:
In [25]: %%timeit
....: cleaned_up_list = []
....: append = cleaned_up_list.append
....: for data in input_list:
....: clean_data = data.strip()
....: if clean_data:
....: append(clean_data)
....:
10 loops, best of 3: 123 ms per loop
सबसे तेज़ दृष्टिकोण वास्तव में itertools.ifilter
itertools.imap
के साथ संयुक्त के साथ filter
के साथ संयुक्त है।
फ़ंक्शन संदर्भ list.append
का पुनर्मूल्यांकन करने की आवश्यकता को हटाने के लिए प्रत्येक पुनरावृत्ति अधिक कुशल है, यदि आप एक लूप से फंस गए थे और सबसे कुशल दृष्टिकोण चाहते थे तो यह एक व्यवहार्य विकल्प है।
आप इसे एक कस्टम फ़ंक्शन लिखकर स्वयं को ढूंढ सकते हैं जो हर बार काउंटर और/या प्रिंटर को बढ़ाता है। –