2015-02-22 4 views
6

से करने के लिए सबसे pythonic तरीका है क्या: स्ट्रिंग की एक सूची और सबस्ट्रिंग की एक सूची स्ट्रिंग सूची है कि स्ट्रिंग सूची के किसी भी शामिल है के तत्वों को दूर करने के बादनिकालें स्ट्रिंग अगर मैं सोच रहा था सबस्ट्रिंग सूची

list_dirs = ('C:\\foo\\bar\\hello.txt', 'C:\\bar\\foo\\.world.txt', 'C:\\foo\\bar\\yellow.txt') 

unwanted_files = ('hello.txt', 'yellow.txt) 

वांछित उत्पादन:

list_dirs = (C:\\bar\\foo\.world.txt') 

मैं ऐसे this के रूप में इसी तरह के सवाल को लागू करने की कोशिश की है, लेकिन मैं अभी भी हटाने बनाने के लिए संघर्ष कर रहा हूँ और एक सूची के लिए है कि विशेष कार्यान्वयन का विस्तार।

अब तक मैंने यह किया है:

for i in arange(0, len(list_dirs)): 
    if 'hello.txt' in list_dirs[i]: 
     list_dirs.remove(list_dirs[i]) 

यह काम करता है, लेकिन शायद इसे और अधिक क्लीनर तरीका नहीं है और अधिक महत्वपूर्ण यह एक सूची का समर्थन नहीं करता, अगर मैं hello.txt या yellow.txt मैं हटाने चाहते हैं एक या उपयोग करना होगा। धन्यवाद।

+0

@PM 2Ring हाँ मैं numpy उपयोग कर रहा था की तरह लग रहे हैं tting। arange – dudas

+0

श्रेणी के समान है यह एक संग्रह को संशोधित करने के लिए सुरक्षित नहीं है जिसे आप चालू कर रहे हैं। –

उत्तर

2

list comprehensions

>>> [l for l in list_dirs if l.split('\\')[-1] not in unwanted_files] 
['C:\\bar\\foo\\.world.txt'] 

उपयोग split का उपयोग फ़ाइल नाम

>>> [l.split('\\')[-1] for l in list_dirs] 
['hello.txt', '.world.txt', 'yellow.txt'] 
+0

मुझे लगता है कि यह काम किया। धन्यवाद – dudas

+0

अभी थोड़ा करीब देख रहे हैं। क्या इस कार्यान्वयन को अवांछित फ़ाइलों या सिर्फ एक सबस्ट्रिंग के सही फ़ाइल नाम की आवश्यकता है? मैंने परीक्षण किया और ऐसा लगता है कि सभी सही फ़ाइल नाम – dudas

+0

@dudas के लिए यह आवश्यक फ़ाइल नाम की आवश्यकता है। – styvane

1

आप भी

print filter(lambda x: x.split('\\')[-1] not in unwanted_files, list_dirs) 
#['C:\\bar\\foo\\.world.txt'] 

लैम्ब्डा के साथ एक फिल्टर समारोह इस्तेमाल कर सकते हैं या आप आयात करने के लिए कोई आपत्ति नहीं है, तो प्राप्त करने के लिए os (आईएमओ यह क्लीनर है तो spli स्ट्रिंग) एक सूची समझ में

print filter(lambda x: os.path.basename(x) not in unwanted_files, list_dirs) 

यह इस

[l for l in list_dirs if os.path.basename(l) not in unwanted_files] 
संबंधित मुद्दे