[英]Convert block of loop into a list comprehension
我想轉換這個片段
for val in G[k]:
if val in span[k]:
result.append((val,col))
elif val in G[k] and val not in span[k] and S[val][k] != 'col':
result.append((val,row))
進入列表理解。 但這給了我錯誤:
[(val,col) if val in span[k] else (val,row) if val in G[k] and val not in span[k] and S[val][k] != 'col' for val in G[k]]
那么正確的語法是什么,如果有的話
更改
[(val,col) if val in span[k] else (val,row)
if val in G[k] and val not in span[k] and S[val][k] != 'col'
for val in G[k]]
至
[(val,col) if val in span[k] else (val,row)
for val in G[k]
if val in G[k] and val not in span[k] and S[val][k] != 'col' ]
經驗法則如果有if
之前for
在理解,它必須有一個else
。
您正在使用沒有else
部分的條件表達式; 這是一個語法錯誤。
正確的翻譯是:
[(val,col) if val in span[k] else (val,row) for val in G[k] if val in span[k] or S[val][k] != 'col']
例如,過濾掉任何不首先匹配你的兩個條件,並且不產生添加到輸出的東西,值的兩個分支之間進行選擇。
我簡化了條件; 有一個在第二表達一些多余的測試( val in G[k]
是總是如此為一個循環在G[k]
,並且如果val in span[k]
不是 True
,則逆val not in span[k]
是肯定True
的好,並不需要再次進行測試。
就個人而言,我發現顯式for
循環更具可讀性,但你至少可以用同樣的方式簡化它:
for val in G[k]:
if val in span[k]:
result.append((val,col))
elif S[val][k] != 'col':
result.append((val,row))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.