【发布时间】:2016-01-05 19:53:06
【问题描述】:
所以我做了两组对象,就像这样。
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 的第一个属性匹配的最后一个属性的对象。
比如... set1 中的 1234 将匹配 set 2 中的 3456。
我可以很容易地将其作为一个列表而不是一个集合来执行,但是如果我能弄清楚过程,那么一个集合感觉会更有效率,但不确定如何返回对象属性的交集。任何帮助。
已编辑:因为我被要求提供代码,而我的假设与我实际所做的并不完全相同。
感谢 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
【问题讨论】:
-
我认为您需要显示更多代码来帮助我们理解您的问题。由于我们并不真正知道
haverooms.borough和wantrooms.borough的类型,这使问题变得更加困难。 -
如果您不想“蛮力”执行此操作,则必须实现与 DB index 相同的想法,这意味着,每当有新人被添加到
haverooms或wantrooms插入还将更新一个额外的数据结构,以防此人是borough。这样,您可以在寻找匹配项时仅对“相关”人员进行快速迭代。
标签: python object set intersection