Python 中对象属性的交集
Intersection of Object Attributes in Python
所以我做了 2 组对象,像这样。
class 4digits:
def __init__(self, value):
self.value = value
self.first = (value - (value % 100)) / 100
self.last = value % 100
这些都是 4 位数字对象,所以就像...
object.value = 1234
object.first = 12
object.last = 34
如果我有 2 个集合,set1 和 set2,我想更新 set1 和 set2 以仅包含 set1 的最后一个属性与 set2 的第一个属性相匹配的对象。
比如...
组 1 中的 1234 将匹配组 2 中的 3456。
我可以很容易地将它作为一个列表而不是一个集合来完成,但是如果我能弄清楚这个过程,集合感觉会更有效率,但我不确定我如何 return 对象属性的交集.任何帮助。
已编辑:因为我被要求提供代码,而我的假设与我实际所做的并不完全相同。
感谢 Jez,我得到了这个答案:
def lastinfirst(list1, list2):
firsts = set( l2.first for l2 in list2)
newlist1 = [ l1 for l1 in list1 if l1.last in firsts]
return newlist1
def firstinlast(list1, list2):
lasts = set( l1.last for l1 in list1)
newlist2 = [ l2 for l2 in list2 if l2.first in lasts]
return newlist2
如果我没有正确理解你想要什么,应该这样做:
# Get the set of unique boroughs in which people want rooms:
wantedboroughs = set( w.borough for w in wantrooms )
# Get all records for people who have rooms in those boroughs:
result = [ h for h in haverooms if h.borough in wantedboroughs ]
好吧,现在您已将问题编辑为根本不涉及房间和行政区。但也许您可以概括此处举例说明的原则。
所以我做了 2 组对象,像这样。
class 4digits:
def __init__(self, value):
self.value = value
self.first = (value - (value % 100)) / 100
self.last = value % 100
这些都是 4 位数字对象,所以就像...
object.value = 1234
object.first = 12
object.last = 34
如果我有 2 个集合,set1 和 set2,我想更新 set1 和 set2 以仅包含 set1 的最后一个属性与 set2 的第一个属性相匹配的对象。
比如... 组 1 中的 1234 将匹配组 2 中的 3456。
我可以很容易地将它作为一个列表而不是一个集合来完成,但是如果我能弄清楚这个过程,集合感觉会更有效率,但我不确定我如何 return 对象属性的交集.任何帮助。
已编辑:因为我被要求提供代码,而我的假设与我实际所做的并不完全相同。
感谢 Jez,我得到了这个答案:
def lastinfirst(list1, list2):
firsts = set( l2.first for l2 in list2)
newlist1 = [ l1 for l1 in list1 if l1.last in firsts]
return newlist1
def firstinlast(list1, list2):
lasts = set( l1.last for l1 in list1)
newlist2 = [ l2 for l2 in list2 if l2.first in lasts]
return newlist2
如果我没有正确理解你想要什么,应该这样做:
# Get the set of unique boroughs in which people want rooms:
wantedboroughs = set( w.borough for w in wantrooms )
# Get all records for people who have rooms in those boroughs:
result = [ h for h in haverooms if h.borough in wantedboroughs ]
好吧,现在您已将问题编辑为根本不涉及房间和行政区。但也许您可以概括此处举例说明的原则。