Pythonで別のリスト内の他の項目にリスト項目の値を比較します
質問
私は2番目のリストの値に1、リスト内の値を比較し、最初のリストではなく、第二すなわちであることすべてのそれらを返すようにしたい。
list1 = ['one','two','three','four','five']
list2 = ['one','two','four']
'5' 'を3' を返すとなります。
私は、Pythonと少しだけ経験を持っているので、これはそれを解決しようとするととんでもないと愚かな方法であることが判明するかもしれないが、この私はこれまでやっていること:
def unusedCategories(self):
unused = []
for category in self.catList:
if category != used in self.usedList:
unused.append(category)
return unused
しかし、これはエラー「非配列上の反復を」スロー、Iは<(両方のための生の出力は私の最初の例と同じ形式である)一方または両方の「リストが」実際にリストされないことを意味するために集まります/ P>
解決
リストの間の差を得るためにセットを使用します:
>>> list1 = ['one','two','three','four','five']
>>> list2 = ['one','two','four']
>>> set(list1) - set(list2)
set(['five', 'three'])
他のヒント
set(list1).difference(set(list2))
と set.difference
するます:
>>> list1 = ['one','two','three','four','five']
>>> list2 = ['one','two','four']
>>> set(list1).difference(list2)
{'five', 'three'}
あなたが設定するlist2
の変換をスキップすることができます。
あなたがセットまたはリスト内包でそれを行うことができます:
unused = [i for i in list1 if i not in list2]
ここにすべての答えが正しいです。リストが不足している場合、私は、リストの内包表記を使用します。セットは、より効率的になります。あなたのコードが動作しない理由を探って、私はエラーを得ることはありません。 (それは動作しませんが、それは別の問題です)。
>>> list1 = ['a','b','c']
>>> list2 = ['a','b','d']
>>> [c for c in list1 if not c in list2]
['c']
>>> set(list1).difference(set(list2))
set(['c'])
>>> L = list()
>>> for c in list1:
... if c != L in list2:
... L.append(c)
...
>>> L
[]
問題がif
文は意味をなさないということです。
この情報がお役に立てば幸いです。
所属していません StackOverflow