我編寫了一段代碼來遍歷一個列表,查看是否有一行包含一個或多個關鍵詞:轉換代碼列表理解
STRINGS_TO_MATCH = [ "Foo",
"Bar",
"Oggle" ]
for string in STRINGS_TO_MATCH
if string in line:
val_from_line = line.split(' ')[-1]
有誰碰巧知道是否有一種方法,使這更可讀?在這裏列表理解是否更合適?
我編寫了一段代碼來遍歷一個列表,查看是否有一行包含一個或多個關鍵詞:轉換代碼列表理解
STRINGS_TO_MATCH = [ "Foo",
"Bar",
"Oggle" ]
for string in STRINGS_TO_MATCH
if string in line:
val_from_line = line.split(' ')[-1]
有誰碰巧知道是否有一種方法,使這更可讀?在這裏列表理解是否更合適?
這裏要記住的一點是,內涵是表達,其目的是創建一個價值 - 列表解析創建列表,字典內涵創建類型的字典,並設置推導式創建集。在這種情況下,他們不太可能提供幫助,因爲您沒有創建任何此類對象。
您的代碼示例不完整,因爲它不提供做任何與它提取的val_from_line
值。我假設你想從line
中提取最後一個「單詞」,其中包含STRINGS_TO_MATCH
中的任何字符串,但很難處理這些不完整的信息,因此,就我所知,這個答案可能完全沒用。
假設我是正確的,最簡單的方法,以找出是否line
包含任何STRINGS_TO_MATCH
的是使用表達
any(s in line for s in STRINGS_TO_MATCH)
這將使用所謂的發電機表達,這是類似列表理解 - 解釋器可以迭代它以產生一系列值 - 但它不會創建值列表,它只是將它們創建爲客戶端代碼(在這種情況下,內置的any
功能)請求它們。所以我可能會重寫代碼爲
if any(s in line for s in STRINGS_TO_MATCH):
val_from_line = line.split(' ')[-1]
我將離開你來決定你真的想後做什麼,與警告注意,此代碼執行後val_from_line
可能會或可能不存在(取決於是否不是條件是真的),這從來不是一個完全舒適的情況。
這正是我所期待的!謝謝! – Shibby
'線'是什麼? –
另外,'val_from_line'應該是一個列表嗎? –
每個輸入文件都有100個隨機行。當我遍歷文件時,每行包含每行。 val_from_line也會包含文件中的特定字段。 – Shibby