2016-03-21 10 views
9

मेरे पास names नामक तारों वाली एक सूची है, मुझे names सूची में प्रत्येक तत्व को pattern सूची से प्रत्येक तत्व के साथ खोजना होगा। मिले कई गाइड है कि एक व्यक्ति के लिए स्ट्रिंग के माध्यम से नहीं बल्कि तारस्ट्रिंग तत्वों की एक और सूची से मेल खाने वाली स्ट्रिंग तत्वों की खोज सूची

a = [x for x in names if 'st' in x] 

की सूची के लिए पाश अग्रिम रूप से धन्यवाद कर सकते हैं!

names = ['chris', 'christopher', 'bob', 'bobby', 'kristina'] 
pattern = ['st', 'bb'] 

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

a = ['christopher', 'bobby', 'kristina] 

उत्तर

8

उपयोग एक generator expression साथ any() समारोह:

a = [x for x in names if any(pat in x for pat in pattern)] 

any() एक शॉर्ट-सर्किट समारोह है, इसलिए पहली बार यह एक पैटर्न भर आता है कि मैचों, यह सच देता है। चूंकि मैं सूची समझ के बजाय जनरेटर अभिव्यक्ति का उपयोग कर रहा हूं, इसलिए मिलान के पहले पैटर्न के बाद कोई पैटर्न भी चेक नहीं किया गया है। इसका मतलब है कि यह करने के लिए यह सबसे तेज़ संभव तरीका है।

+0

एक विजेता की तरह काम किया है, और स्पष्टीकरण के लिए धन्यवाद !!! – Christopher

2

आप कुछ इस तरह कर सकते हैं:

[name for name in names if any([p in name for p in pattern])] 

कोड है आत्म व्याख्यात्मक, बस इसे जोर से पढ़; हम उन सभी नामों की एक सूची बना रहे हैं जिनमें उनमें से एक पैटर्न है।

का उपयोग करते हुए दो छोरों:

for name in names: 
    for pattern in patterns: 
     if pattern in name: 
      # append to result 
+0

जोर से सुझाव पढ़ने के लिए धन्यवाद, यह मदद करता है :) – Christopher

संबंधित मुद्दे