2つの同じ長さのセットをループし、各セットの要素も配列内にあるかどうかを確認したいと思います。複数のリストとif else条件付きのPythonリストの理解
これは私がすでに解決しているHackerrankの質問です。しかし、私はHackerrankを使ってPythonをさらに理解しています。私はリストの理解について学習してきましたが、私がそれを悪い生産コードとみなすためにどのように使用しようとしているかを信じていますが、自分の知識のために言語構文の可能性を探求したいと思います。
これはそれを設定するコードである:
n, m = map(int, input().split())
arr = list(map(int, input().split()))
A = set(map(int, input().split()))
B = set(map(int, input().split()))
タスクは、両方のB内のすべての要素の出力にすべての要素の+1の値AおよびARRの両方を有する整数であり、-1およびarr。
サンプル入力:
3 2
1 5 3
3 1
5 7
サンプル出力:
print(sum([1 for a in A if a in arr]) + sum([-1 for b in B if b in arr]))
しかし、これは私が達成したいものに近いです:これは、必要な結果を達成する
1
:
sum([1 if a in arr else -1 if b in arr for a, b in zip(A, B)])
EDIT(これは実際に近い):
print(sum(1 if a in arr -1 if b in arr for a, b in zip(A, B)))
あなたはそれがコードを削減しようとするではないですので、両方がワンライナーです見ることができるのではなく、単にリストの内包と神託のコードの可能性を理解することと。これが可能でない場合や悪い習慣であっても、私は非常に興味があります。
これはHackerrankリンクです:すべての https://www.hackerrank.com/challenges/no-idea
リストをすぐにセットにする場合、リスト内包表記*を使用するのはなぜですか?代わりに集合理解を使うことができます。 –
ちなみに、 'sum()'が繰り返し可能であることを覚えていれば '[] 'を取り除いてジェネレータを渡すことができるので、あなたはリスト内包が必要ではないと思います。 – spectras
@spectras私はそれを知らなかった。私はリスト内包物なしでそれを試みます。私はまた 'else if'が2つの' if'文でなければならないことに気付きました。最初のものが真でないとしても2番目の条件がチェックされます – joshuatvernon