編輯:這個問題原來與串列理解完全沒有關系。這個問題是由于沒有將完整的路徑,而只是將檔案名傳入 os.path.isfile(),這使得它總是評估為 False。
為什么這個串列理解前面的 if/else 不能按預期作業?下面的陳述句產生了一個全部為0的串列(else情況)。
[1 ifos.path. isfile(file) else 0 for file in os.listdir(path)]
如果該檔案是一個檔案,預期輸出將是1,如果該檔案是一個目錄,預期輸出將是0。
我在另一行獨立測驗了1 if os.path.isfile(file)else 0,結果和預期一樣(有1和0的混合)。我沒有發現我的串列理解陳述句有任何語法問題。
更有趣的是,如果我把條件換成別的東西,比如1 if file else 0,行為就翻轉了。
我試著在我的條件中加入bool(),但它沒有任何作用。我還嘗試了str(file),也沒有區別。
uj5u.com熱心網友回復:
嘗試將檔案的絕對路徑傳遞給isfile函式:
[1 if os.path.isfile(os.path.join(path, file)) else 0 for file in os.listdir(path)]
你也可以在沒有if的情況下實作:
[int(os.path.isfile(os.path.join(path, file)) for file in os.listdir(path)]
uj5u.com熱心網友回復:
你可以不用三元組運算子來做:
[int(os.path.isfile(os.path.join(path, file)) for file in os.listdir(path)]
或者根據你打算對產生的串列做什么:
[os.path.isfile(os.path.join(path, file)) for file in os.listdir(path)]
我總是傾向于后者
。轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/333357.html
標籤:
