2つのリストの要素を比較する際、リスト型をset型に変えると「-」「&」などの演算子1つで集合演算できます(AND、OR、NOTとか)。
ソースコード
#!/usr/bin/python # coding: UTF-8 # リストの比較(by 集合演算) old_list = ['A', 'B', 'C', 'D', 'E', 'F'] # 古いリスト new_list = ['A', 'C', 'F', 'G', 'H', 'I'] # 更新された新しいリスト、とする # 組み込み関数set()を用いて(リストを含む)シーケンス型からset型データを作成 old_set = set(old_list) new_set = set(new_list) print 'old_set ==', old_set print 'new_set ==', new_set # 差集合: old_setの要素からnew_setに含まれる要素を削除した要素集合 # すなわち、old_setをnew_setに更新した際に、削除された要素集合、とみる print 'old_set - new_set ==', old_set - new_set print 'len(old_set - new_set) ==', len(old_set - new_set) # 削除された個数 # old_setをnew_setに更新した際に、追加された要素集合、とみる print 'new_set - old_set ==', new_set - old_set print 'len(new_set - old_set) ==', len(new_set - old_set) # 追加された個数 # old_setをnew_setの共通要素集合(更新した際に変更されなかった要素、とみる) print 'new_set & old_set ==', new_set & old_set # old_setかnew_setに含まれる要素集合 print 'new_set ^ old_set ==', new_set ^ old_set # 和集合: old_setとnew_setに含まれる重複の無い要素集合 print 'new_set | old_set ==', new_set | old_set
実行結果
old_set == set(['A', 'C', 'B', 'E', 'D', 'F']) new_set == set(['A', 'C', 'G', 'F', 'I', 'H']) old_set - new_set == set(['B', 'E', 'D']) len(old_set - new_set) == 3 new_set - old_set == set(['I', 'H', 'G']) len(new_set - old_set) == 3 new_set & old_set == set(['A', 'C', 'F']) new_set ^ old_set == set(['B', 'E', 'D', 'G', 'I', 'H']) new_set | old_set == set(['A', 'C', 'B', 'E', 'D', 'G', 'F', 'I', 'H'])
リスト(and シーケンス型)をset型に変更すると要素の順序が失われます。再度リスト型に戻したいときは、list()関数を用います。
>>> set_data = set(['a', 'b', 'c', 'd']) >>> set_data set(['a', 'c', 'b', 'd']) >>> list_data = list(set_data) >>> list_data ['a', 'c', 'b', 'd'] >>> type(list_data) <type 'list'> >>>
話変わりますが、Rubyだと配列のまま加減算ができます(配列オブジェクトが「+」「-」演算子などをサポートしているみたい)。
コメント
. @hrst pythonメモ:list型をset型に変換すれば要素比較が超便利。http://bit.ly/3XUnlA すっかりPython脳が弱ってるのでリハビリするぞ!!
pythonメモ:list型をset型に変換すれば要素比較が超便利。http://bit.ly/3XUnlA すっかりPython脳が弱ってるのでリハビリするぞ!!
[…] This post was mentioned on Twitter by Naoyuki ABE, Naoyuki ABE. Naoyuki ABE said: . @hrst pythonメモ:list型をset型に変換すれば要素比較が超便利。http://bit.ly/3XUnlA すっかりPython脳が弱ってるのでリハビリする […]
pythonのset便利
ちょうどリストの要素をまとめたかったので、とても参考になりました。ありがとうございます。
> ハルさん
どういたしまして。参考になったようでなによりです。