複雑なオブジェクトを持つ複数のリストがあります。私はブール演算をしたいと、または、彼らと。複雑なデータオブジェクトを持つ複数のリストでAND、ORを実行しないでください
および:結果のリストには、すべてのソースリストが使用されているすべてのオブジェクトが含まれます。重複はありません。
または:結果リストには、使用されているすべてのソースリストのすべてのオブジェクトが含まれている必要があります。重複はありません。
:募集リストには、非一覧に存在しないソースリストの既存のオブジェクトのみが含まれている必要があります。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# the "complex data"
class Person:
def __init__(self, name):
# assume the 'name' as unique
self.name = name
# create example data
mylistA = [Person('Anna'),
Person('Bob'),
Person('Jane'),
Person('Alfred')]
mylistB = [Person('Simon'),
Person('Anna'),
Person('Doris'),
Person('Bob')]
mylistC = [Person('Bob'),
Person('Rosi'),
Person('Becky'),
Person('Anna')]
mylistD = [Person('Alfred'),
Person('Bob'),
Person('Chris'),
Person('Susi')]
def doAND(some_lists):
pass
def doOR(some_lists):
pass
def doNOT(one_list, not_list):
pass
# should result in 'Anna', 'Bob'
resultAND = doAND([mylistA, mylistB, mylistC])
print(resultAND)
# should result in 'Anna', 'Bob', 'Jane', 'Alfred', 'Simon', 'Doris', 'Rosi',
# 'Becky'
resultOR = doOR([mylistA, mylistB, mylistC])
print(resultOR)
# 'Anna'
resultNOT = doNOT(resultAND, mylistD)
print(resultNOT)
背景情報実際のシナリオの「複雑なオブジェクト」は、sqlalchemyオブジェクトです。私のここでの例の文脈におけるそれらの "身元"は主キーではありません。彼らの「アイデンティティ」は、メンバーの共同体(単純な例:「ファーストネーム」、「ラストネーム」、「生年月日」)に基づいて形成されます。
です。 –
"複雑なデータ"のために '__eq__'を実装する必要があります –