2017-02-16 3 views
-1

Ich möchte Conditional List Verständnis verwenden, um eine "gültige" Liste von Schaltern zurückzugeben. Ein gültiger Schalter ist der folgende: Die ersten beiden Buchstaben repräsentieren das Land, also [CH]SW002. Diese Buchstaben müssen mit den ersten beiden Buchstaben des aktuellen Geräts übereinstimmen. Wenn es sich bei dem Gerät um ein Notebook handelt, US[NB]001, kann die Landesvorwahl ignoriert werden.Python bedingter Ausdruck ungültige Syntax

Die Geräte unten sollten daher die folgenden Schalter als:

  • CHPC001: CHSW002
  • USPC001: USSW001, USSW002
  • USNB001: USSW001, USSW002, CHSW002

Unten ist mein Code, aber es wirft einen Syntaxfehler auf:

switches = ['USSW001', 'USSW002', 'CHSW002'] 
devices = ['CHPC001', 'USPC001', 'USNB001'] 

for device in devices: 
    print([sw if 'nb' in device else sw if device[:2] in sw for sw in switches]) 
+0

Ich habe nicht verstanden, welche Beziehungen sollten im Endergebnis sein? Wie sollten sie aussehen? – RomanPerekhrest

+0

Sie haben zwei solche Ausdrücke, und die zweite fehlt ein 'else'. Was passiert, wenn der Test in 'sw if device [: 2] in sw' 'False' ist? –

+0

'print ([sw if 'nb' im Gerät else sw für sw in switches wenn Gerät [: 2]])' zumindest analysiert. – melpomene

Antwort

1

Verwenden Sie hier keinen bedingten Ausdruck. Sie möchten Filter Schalter, nicht für jeden Schalter unterschiedliche Ergebnisse produzieren.

Die Bedingung pro Schalter, ausgedrückt als ein boolean Test:

device[2:4] == 'NB' or sw[:2] == device[:2] 

so entweder das Gerät ein Notebook ist (und so alle Schalter gelten) oder der Ländercode übereinstimmen muss. Setzen Sie das in einen if Test am Ende:

[sw for sw in switches if device[2:4] == 'NB' or sw[:2] == device[:2]] 
+0

Genau das habe ich gesucht. Vielen Dank – rhillhouse