2017-02-16 133 views
-1

我想使用條件列表理解返回一個「有效」的開關列表。有效的開關如下: 前兩個字母代表國家,因此[CH]SW002。這些字母必須與當前設備的前兩個字母匹配。如果設備是筆記本,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

你有兩個這樣的表達式,第二個缺少'else'。 sw'中的sw如果設備[:2]中的測試爲「False」時,會發生什麼情況? –

+0

'print([sw if'nb'in device else sw sw for sw in switch if if device [:2]])'至少要解析。 – 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