2016-06-14 9 views
-4

Ich habe eine for Schleife, die eine Teilzeichenfolge jedes Elements in einer Liste von Zeichenfolgen mit den Elementen in einer anderen Liste von Zeichenfolgen vergleicht.Konvertieren einer For-Schleife in ein Listenverständnis

mylist = [] 
for x in list1: 
    mat = False 
    for y in list2: 
     if x[:-14] in y: 
      mat = True 
    if not mat: 
     mylist.append(x) 

Allerdings würde Ich mag es, in einer Liste Verständnis setzen (für Schleifen für meinen Geschmack nicht so präzise sind), aber kann nicht einen Weg, es zu tun mit der Berechnung der mat finden.

Ich habe versucht, Variationen:

mylist = [x for x in list1 if x[:-14] in list2] 

Aber das ist nicht die gleiche Logik wie die ursprüngliche Schleife. Gibt es eine Möglichkeit, das Original für eine Schleife in Listenverständnis zu reformieren?

+4

Nein Dies ist kein Konvertierungsservice. Wenn Sie das selbst versucht haben und irgendwo steckengeblieben sind, geben Sie bitte einen [mcve] an. Beachten Sie auch, dass nicht alle "for" -Schleifen zu Listenkompressen werden können. – jonrsharpe

+1

Ich habe das Vorwort ausgeblendet, weil Meta-Inhalt nicht in Fragen gehört und Leute können runterspulen, ob sie Ihnen eine Antwort/einen Link zu einem geben. Es ist gar nicht * "offensichtlich, dass diese Frage gestellt wird, damit sie auf ein breiteres Spektrum von Problemen angewendet werden kann" *, ** du hast wortwörtlich darum gebeten, dass dein Beispiel umgerechnet wird **, ohne dass du selbst etwas anstellen musst Namen. – jonrsharpe

+0

Soll ich Links zu all den anderen Dingen anbieten, die ich auf dieser Seite versucht habe? Das würde deine Aussage bedeuten. Dies ist eine einfache Frage, für die mehr Mühe aufgewendet wird, um zu beweisen, dass ich es versucht habe, als es nötig wäre, um die Frage zu beantworten. ziemlich absurd Antwort ... Ich verbrachte mindestens 30 Minuten wahrscheinlich suchen und versuchen, bevor Sie – user3496060

Antwort

2

, wie geschrieben steht, nicht Sie nicht direkt als eine Liste Verständnis schreiben kann.

jedoch, wenn Sie die Berechnung von mat zu einem einzelnen Ausdruck umschreiben. (In diesem Fall würden Sie any verwenden)

mylist = [] 
for x in list1: 
    mat = any((x[:-14] in y) for y in list2) 
    if not mat: 
     mylist.append(x) 

Dann diese Definition bewegen direkt in den if not Zustand:

mylist = [] 
for x in list1: 
    if not any((x[:-14] in y) for y in list2): 
     mylist.append(x) 

Nun ist es recht einfach zu konvertieren:

mylist = [x for x in list1 if not any((x[:-14] in y) for y in list2)] 
+0

Freund, Sie lasen in den Punkt der Frage und lieferten eine knappe Antwort, die die Methode enthält, um von der for-Schleife in das Listenverständnis zu konvertieren. Ich habe es gerade ausprobiert und es hat super funktioniert. Glaube an SO = restauriert! – user3496060

+1

@ user3496060 Ich bin so froh, dass ich deinen Glauben wiederhergestellt habe, da du ganz klar von Beispielen lernen möchtest Ich habe deine Frage dahingehend bearbeitet, dass ich glaube, dass sie gut zu SO passt (das Original war sehr lokalisiert und nicht sehr wahrscheinlich zukünftigen Zuschauern) Ich hoffe, es könnte Ihnen eine bessere Vorstellung von der Art der Frage geben, die besser angenommen wird, damit Sie Ihren Glauben nicht wieder verlieren! –

-1

Suchen Sie so etwas wie dies ?:

mylist = [x for x in list1 if x[:-14] not in list2] 
+0

Yea ich habe dieses vor dem Posten versucht (fand ein anderes Beispiel) und es hat nicht funktioniert. – user3496060

Verwandte Themen