次のコードスニペットを検討してください。これは、breakステートメントで構文エラーのフラグを立てます。pythonで三項演算子を使用していますか?
digits = list(str(102))
dummy = list(str(102/2))
for j in digits:
dummy.remove(j) if j in dummy else break
私はこれをどのように修正すればよい(私はまだ三項演算子を使用したい)
次のコードスニペットを検討してください。これは、breakステートメントで構文エラーのフラグを立てます。pythonで三項演算子を使用していますか?
digits = list(str(102))
dummy = list(str(102/2))
for j in digits:
dummy.remove(j) if j in dummy else break
私はこれをどのように修正すればよい(私はまだ三項演算子を使用したい)
編集:?
(コメントでStefan Pochmannと私の会話を参照してください)
3進演算子はのためのものではなく、ステートメントではなく、代入式または式(およびbreak
)はのみ文です:
a = 5 if cond else 3 #OK
do() if cond else dont() #also OK
do() if cond else break #not OK
使用ステートメントを行うには、通常のif-else
声明:
if cond:
do()
else:
break
これは問題ありませんが、5〜6回入力すると醜いように見えますが、回避策がありますか? – TheChetan
あなたの例は全く同じではありません。*有効な構文は – jonrsharpe
です。@TheChetan:いいえ、ありません。 Pythonは、読みやすさに重点を置いています。 –
が再 itertools.takewhile 場合を使用して書き込むことができますあなたはより簡潔な解決策が必要です
digits = list(str(102))
dummy = list(str(102/2))
from itertools import takewhile
for d in takewhile(dummy.__contains__, digits):
dummy.remove(d)
あなたも、あなたのロジックを反転させることにより、forループを使用して、他の必要性を取り除くことがTrueのときjはダミー破壊していないかどうかを確認することができます:あなたはのいずれかの出現をすべて削除したい場合にも
for j in digits:
if j not in dummy:
break
dummy.remove(j)
ダミーである桁からの最初の要素は、任意の繰り返し要素のためにそれを行うことはありません除去するが、意志を削除する要素のセットを作成した後、リストカンプを使用して: digits = str(102)
dummy = list(str(102/2))
st = set(takewhile(dummy.__contains__, digits))
dummy[:] = [d for d in dummy if d not in st]
print(dummy)
また、ノーので、文字列を反復処理することができます後にリスト操作を行う予定がない限り、数字のリストを呼び出す必要があります。
ああ、ダンダーの方法を避けるのは難しいです。 'functools.partial'と' operator.contains'を使うことができます。 'in_dummy = partial(contains、dummy)'です。これはアンダースコアメソッドを避けるための多くの作業のようですが、本当のメリットはありません。ラムダは、代替として使用することができる。 'ダミーのラムダ:e ' –
@JaredGoguen、そうですね、このような場合に '__contains__'を使用しても構いませんが、ラムダよりはるかに優れています。 –
'break'はステートメントなので、3進の内部では使用できません。ごめんなさい。 –
私はあなたがそのケースに対して三項演算子を使うことはできないと思っています... – Ian
リストから要素を削除するには、おそらく注意が必要です(逆の方法で行う方が安全です)。これをチェックしてください:http://stackoverflow.com/questions/35618307/how-to-transform-string-into-dict/35618686#35618686またPadraicの答えを参照してください – Ian