1

このスニペットを変換したい

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]]

ieがある場合、正しい構文は何でしょうか

4

2 に答える 2

2

変化する

[(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理解にbeforeがある場合、.forが必要elseです。

于 2013-11-07T15:17:06.407 に答える
2

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']

たとえば、最初に 2 つの条件に一致しないものを除外し、出力に何かが追加される結果となる値を 2 つの分岐から選択します

条件を単純化しました。2 番目の式 (val in G[k]はループ オーバーの場合は常にtrue であり、そうでない場合は逆も同様であり、再度テストする必要はありません。G[k]val in span[k] Trueval 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))
于 2013-11-07T15:18:14.150 に答える