我有两个列表,listA
和listB
。两者都包含具有函数get_values
的类的实例,该函数返回另一个值列表。
所以,listA
包含
[<MyInstance1>, <MyInstance2>, <MyInstance3>]
libstB
[<MyInstance4>, <MyInstance5>, <MyInstance6>]
我可以通过以下方式获取值:
print([x.get_values() for x in listA])
输出:
[
['dummy', 'dummy:red', 'dummy'],
['dummy', 'dummy:yellow', 'dummy'],
['dummy']
]
listB
print([x.get_values() for x in listB])
输出:
[
['dummy2', 'dummy2', 'yellow', 'dummy2'],
['dummy2', 'dummy2', 'red', 'dummy2'],
['dummy2']
]
我想获取一个包含具有相同值的实例对的元组列表,丢弃标记为dummy
或dummy2
的值。
值的位置将是相同的,因此对于listA get_values()
我只关心第二个元素,而在listB get_values()
我只关心第三个元素。
在这种情况下,我会得到:
[
(<MyInstance1>, <MyInstance5>), # Because they both have "red"
(<MyInstance2>, <MyInstance4>), # Because they both have "yellow"
(<MyInstance3>, <MyInstance6>) # Because they neither have any value
]
我试图避免嵌套,我正在寻找最好的Pythonic和/或优雅方式来处理这个问题。我用itertools或lambdas来猜测。
答案 0 :(得分:0)
你的最后一个条件对我来说似乎不对,因为你在一个列表中有“dummy”值,而在另一个列表中有“dummy2”值,但这应该满足你的其他条件:
class Blah:
def __init__(self, vals):
self.vals = vals
def get_values(self):
return self.vals
lst1 = [Blah(['dummy', 'red', 'dummy']),
Blah(['dummy', 'yellow', 'dummy']),
Blah(['dummy'])]
lst2 = [Blah(['dummy2', 'dummy2', 'yellow', 'dummy2']),
Blah(['dummy2', 'dummy2', 'red', 'dummy2']),
Blah(['dummy2'])]
output = [(item1, item2) for item1 in lst1 for item2 in lst2
if set(item1.get_values()).intersection(item2.get_values())]