2017-02-16 13 views
-1

"有効な"リストを返すために条件付きリストの理解を使用します。有効なスイッチは次のとおりです。 最初の2文字は国を表します。したがって、[CH]SW002です。これらの文字は、現在のデバイスの最初の2文字と一致する必要があります。デバイスがノートブックの場合、US[NB]001、国の接頭辞は無視できます。Pythonの条件式が無効です

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

以下

装置は、したがって、それらに割り当てられた次のスイッチを有していなければなりません以下は私のコードですが、構文エラーが発生します:

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

私は理解していませんでしたが、どのような関係が最終結果になるはずですか?彼らはどのように見えるでしょうか? – RomanPerekhrest

+0

あなたは2つのそのような式を持っていて、2番目の式には 'else'がありません。 'sw:device [:2] in sw'のテストが' False'の場合にどうなるでしょうか? –

+0

'print(デバイス内のnbを 'nb'とした場合sw:デバイス[:2]]の場合はスイッチ内のsw)'が少なくとも解析します。 – melpomene

答えて

1

ここでは条件式を使用しないでください。 フィルタスイッチにする必要がありますが、スイッチごとに異なる結果は生じません。

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

のでデバイスが(そのため全てスイッチが適用)ノートブックのいずれか、または国コードが一致しなければならない:

スイッチ当たり条件は、あるものブーリアンテストとして表しました。最後にifテストに入れてください:

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

これはまさに私が探していたものです。ありがとうございました – rhillhouse

関連する問題