Python-比较两组,如果其中一组较大则返回

时间:2018-12-16 14:36:21

标签: python dictionary for-loop

我创建了一个脚本,在其中比较两组,其中一组称为:

old_sets = {'Hello', 'Stack', 'overflow', }
new_sets = {'Hello', 'Stack', 'overflow', 'Yay' }

我对脚本的想法是,每当new_sets大于old_sets时,就返回该值。

所以我试图创建类似这样的东西:

changed_grades = [old_count in old_sets ) if len(old_sets) < len(new_sets)]

return changed_grades

但是我完全理解错了,我在这里...:(

我的问题是:如何使它在new_dict大于old_sets时返回并忽略old_dict是否大于new_sets? -意思是集内的值与长度无关,这无关紧要。等等:

old_sets = {'Hello', 'Stack', 'overflow', } - Len 3
new_sets = {'Hello', 'Stack', 'overflow', 'Yay' } - Len 4 <-- Print out becuase it has bigger set than old_set

编辑:我的整个功能:

def getChanges(old_sets, new_sets):

    longest_set_length = max(len(old_sets), len(new_sets))
    new_items = new_sets - old_sets

    return new_list

# -------------------------------------------------------------------------

def check_difference():

    old_sets = {'Hello', 'Stack', 'overflow'}

    while True:

        new_sets  = {'Hello', 'Stack', 'overflow', 'Yay'}

        grab_changes = getChanges(old_sets, new_sets)

        if grab_changes....: #Something
            #if there is changes where new_values

        else:
            randomtime = random.randint(10, 20)
            print("No new changes")
            old_sets = new_sets
            time.sleep(randomtime)

因此,正如您所看到的,我想做什么(也许甚至没有必要),但是我想调用getChanges(old_sets, new_sets),该函数在其中检查new_sets是否大于old_sets并返回true。如果没有,那么我们只需点击

else:
   randomtime = random.randint(10, 20)
   print("No new changes")
   old_sets = new_sets
   time.sleep(randomtime)

3 个答案:

答案 0 :(得分:1)

您可以将max与相应的“键”功能配合使用:

return max(old_set, new_set, key=len)

通常,如果a > ba的超集,则集ba的{​​{1}}为true。将b用于“键”功能会将比较更改为len

答案 1 :(得分:0)

如果您只关心集合中元素的数量,则可以简单地将它们的长度与

进行比较。
if len(old_sets) < len(new_sets):
    print(new_sets)

答案 2 :(得分:0)

如果您想知道以length表示的最大集合的长度,则可以:

longest_set_length = max(len(old_set), len(new_set))

此外,既然您知道自己拥有,则可以使用套操作来简化生活。

例如,如果您想知道哪些项目已添加到 new_set ,则可以执行以下操作:

new_items = new_set - old_set

编辑给定的评论

第一

您需要定义一个函数get_number_of_new_items(old_set, new_set)

如我所见,您有两种选择:

def number_of_new_items(old_set, new_set):
    return max(len(new_set) - len(old_set), 0)

def number_of_new_items(old_set, new_set):
    return len(new_set - new_set)

假设您有:

old_sets = {'Hello', 'Stack', 'overflow', }
new_sets = {'My', 'name', 'is'}

第一个实现会说number_of_new_items == 0,第二个实现 会说number_of_new_items == 3。因此,这是您的选择。

第二

在循环中使用该函数:

def check_difference():

    old_sets = {'Hello', 'Stack', 'overflow'}

    while True:

        new_sets  = {'Hello', 'Stack', 'overflow', 'Yay'}

        n_new_items = number_of_new_items(old_sets, new_sets)

        if n_new_items > 0: #Something
            #if there is changes where new_values

        else:
            randomtime = random.randint(10, 20)
            print("No new changes")
            old_sets = new_sets
            time.sleep(randomtime)