Python - сравнить два набора и вернуть, если один из наборов больше - PullRequest
0 голосов
/ 16 декабря 2018

Я создал сценарий, в котором я сравниваю два набора, где есть один, называемый:

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?Вся моя функция:

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, ивозвращает, если это правда. Если нет, то мы просто нажмем

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

Ответы [ 3 ]

0 голосов
/ 16 декабря 2018

Если вы хотите узнать длину самого большого набора в терминах 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'}

Реализация first скажет, что реализация number_of_new_items == 0 и second сказал бы, что 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)
0 голосов
/ 16 декабря 2018

Вы можете использовать max с соответствующей «ключевой» функцией:

return max(old_set, new_set, key=len)

Обычно a > b для наборов a и b - true, если a является надмножествомb.Использование len для функции «ключ» изменяет сравнение на len(a) > len(b).

0 голосов
/ 16 декабря 2018

Если вас интересует только количество элементов в наборах, вы можете просто сравнить их длины с

if len(old_sets) < len(new_sets):
    print(new_sets)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...