pythonの内包表記について
リスト内の同様の要素を削除するために以下のサイトを参考に以下の内包表記を実行しました。
https://note.nkmk.me/python-list-unique-duplicate/
python
1def get_unique_list(seq): 2 seen = [] 3 return [x for x in seq if x not in seen and not seen.append(x)] 4a = [1,1,1,2,2,3,4,5,6,6,6,7] 5print(get_unique_list(a))
結果
[1, 2, 3, 4, 5, 6, 7]
しかし私は以下のコードではないと理解できません。
python
1def get_unique_list1(seq): 2 seen = [] 3 [x for x in seq if x not in seen and seen.append(x)] 4 return seen 5a = [1,1,1,2,2,3,4,5,6,6,6,7]
結果
[1, 2, 3, 4, 5, 6, 7]
結果は一つ目のコードと二つ目は同じなのですが、
and notを使うかandを使うかという点が違います。
x not in seen and not seen.append(x)
の部分を簡単に
A and not B
と置いて考えていくとseen
は最初は空の配列なので、
A
は必ず論理を満たします。その後、not seen.append(x)
の部分ですが
これはA
を満たしたときのみ実行できると考えるとnot seen.append(x)
は
何もしていないと考えられます。それゆえにseen
は空の配列のままです。
それゆえにseen
が常に空であればA
は必ず論理を満たします。
それゆえに結果は[1,1,1,2,2,3,4,5,6,6,6,7]
になるように思えて仕方ありません。
私の考え方のおかしい部分を分かりやすく訂正していただけると幸いです。
よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。