簡體   English   中英

將循環塊轉換為列表理解

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM