Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中对象属性的交集_Python_Object_Set_Intersection - Fatal编程技术网

Python中对象属性的交集

Python中对象属性的交集,python,object,set,intersection,Python,Object,Set,Intersection,所以我做了两组物体,像这样 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 如果我有两个

所以我做了两组物体,像这样

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
如果我有两个集合,set1和set2,我想更新set1和set2,使它们只包含set1的最后一个属性与set2的第一个属性匹配的对象

比如。。。 第1组中的1234将与第2组中的3456匹配

我可以很容易地将其作为列表而不是集合来完成,但如果我能够理解过程,集合会感觉效率更高,但不确定如何返回对象属性的交集。任何帮助

编辑:因为我被要求编写代码,而我的假设并不是我真正在做的事情

多亏了杰兹,我得到了这个答案:

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 ]

好吧,现在你已经把你的问题编辑成完全不是关于房间和行政区的。但是,也许你可以概括这里举例说明的原则。

如果我正确理解了你想要什么,这应该可以做到:

# 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 ]

好吧,现在你已经把你的问题编辑成完全不是关于房间和行政区的。但也许你可以概括一下这里举例说明的原则。

我认为你需要展示更多的代码来帮助我们理解你的问题。由于我们不知道haverooms.borough和wantrooms.borough的类型,这使得问题变得更加困难。如果你不想用“暴力”来解决问题,你必须实现同样的想法,比如,每当一个新的人员被添加到
haverooms
wanrooms
时,如果此人是
borough
,插入操作也会更新一个额外的数据结构。通过这种方式,当您寻找匹配项时,您可以仅快速迭代“相关”人员。我认为您需要显示更多代码来帮助我们了解您的问题。由于我们不知道haverooms.borough和wantrooms.borough的类型,这使得问题变得更加困难。如果你不想用“暴力”来解决问题,你必须实现同样的想法,比如,每当一个新的人员被添加到
haverooms
wanrooms
时,如果此人是
borough
,插入操作也会更新一个额外的数据结构。这样,当你在寻找匹配的时候,你可以快速地只对“相关”的人进行迭代。是的,我想我可以概括一下。这就是我的想法,只是想要一个通用的例子,这样我就可以解决我的具体问题,我认为我给出的例子更容易理解。到目前为止,它似乎还在工作。我用你的概念解决了它,制作了两个函数。我认为你做得很好,把它归结为一个假设:你的第一个问题比第二个问题更容易理解,至少对我来说。但是,是的,根据这个原则,如果你不展示你是如何试图自己解决问题的,那么问题是不受欢迎的。是的,我想我可以概括它。这就是我的想法,只是想要一个通用的例子,这样我就可以解决我的具体问题,我认为我给出的例子更容易理解。到目前为止,它似乎还在工作。我用你的概念解决了它,制作了两个函数。我认为你做得很好,把它归结为一个假设:你的第一个问题比第二个问题更容易理解,至少对我来说。但是,是的,所以有一个原则,如果你不展示你是如何试图自己解决问题的,那么问题是不受欢迎的。