2016-03-21 3 views
9

Ich habe eine Liste mit Strings namens names, ich muss jedes Element in der names Liste mit jedem Element aus der pattern Liste suchen. Es wurden mehrere Hilfslinien gefunden, die für eine einzelne Zeichenkette, aber nicht für eine Liste von Zeichenketten durchlaufen werden können.Suche Liste der String-Elemente, die eine andere Liste von String-Elementen

Vielen Dank im Voraus!

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

gewünschter Ausgang:

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

Antwort

8

Verwenden der any() Funktion mit einem generator expression:

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

any() ist eine Kurzschlussfunktion, so dass das erste Mal, kommt es über ein Muster, das Übereinstimmungen gibt True zurück. Da ich einen Generatorausdruck anstelle eines Listenverständnisses verwende, werden auch keine Muster nach dem ersten übereinstimmenden Muster überprüft. Das bedeutet, dass dies nur der schnellste Weg ist.

+0

Arbeitete wie ein Weltmeister, und wir danken Ihnen für Erklärung !!! – Christopher

2

Sie können etwas tun:

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

Der Code ist selbsterklärend, es ist nur laut vorgelesen; Wir erstellen eine Liste aller Namen, die eines der Muster enthalten.

Mit zwei Schleifen:

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

danke für das vorlesen laut Vorschlag, es hilft :) – Christopher

Verwandte Themen