Хобрук: Ваш путь к мастерству в программировании

Python: математические наборы и кортежи

Я реализую метод в своей программе на Python, который проверяет правильность математической функции.

Примером в моей программе будет:

['set',['tuple',1,2],['tuple',3,4]]

Что соответствует {(1,2),(3,4)} Чтобы проверка вернула True, все кортежи в наборе должны иметь уникальный номер в качестве крайнего левого значения. Таким образом, функция {(1,2),(1,4)} вернет false.

В настоящее время я реализовал это для набора с одним кортежем, что не требует проверки уникальности значения в кортеже:

if "set" in argument:
    print("Found a set")
    print("Next part of argument", argument[1])
    if "tuple" in argument[1]:
        print("Found a tuple, only one found so this argument is a function")

Я не уверен, как реализовать это для набора, который может содержать несколько кортежей, как в приведенных выше примерах.

17.03.2016

  • Вам лучше изменить структуру данных, которую вы хотите обработать, может быть, словарь, например {'type':'set','data':[{'type':'tuple','data':(1,2)},{'type':'tuple','data':(3,4)}]}, или класс, или что-то в этом роде. 17.03.2016
  • Это похоже на домашнее задание, поэтому я не буду писать код за вас, но могу дать несколько советов: используйте цикл for для перебора остальной части списка и создайте set, чтобы вы могли проверить, является ли первое значение в кортеж уже существует и поэтому не уникален. 17.03.2016
  • @TonyBabarino Спасибо, попробую. 17.03.2016

Ответы:


1

Как насчет этого:

def is_function(thing):
    if thing[0] == 'set':
        different = len(set(element[1] for element in thing if element[0] == 'tuple'))
        tuples = sum(1 for element in thing if element[0] == 'tuple')
        return different == tuples

Если первый элемент равен 'set', то подсчитайте количество различных первых элементов в кортежах (путем измерения длины его набора) и сравните его с количеством кортежей в списке.

>>> is_function(['set',['tuple',1,2],['tuple',3,4]])
True
>>> is_function(['set',['tuple',1,2],['tuple',1,4]])
False

Лучшее объяснение:

  1. Функция сначала проверяет, установлен ли первый элемент списка, если это не так, функция завершается (и возвращает None).

  2. Набор создается из понимания генератора element[1] for element in thing if element[0] == 'tuple', который будет набором всех вторых элементов всех тех списков в основном списке, у которых есть первый элемент, называемый кортежем. Этот набор будет содержать все первые значения, каждое из них по одному разу (потому что это набор).

  3. Мощность этого набора хранится в different. Это количество различных элементов сразу после "tuple".

  4. Сумма рассчитывается из аналогичного понимания генератора. Опять же, это перебирает все подсписки, первый элемент которых является кортежем, но добавляется только число 1, поэтому результатом будет количество подсписков, начинающихся с кортежа.

  5. Функция возвращает результат different == tuples; поэтому True, если они одинаковые, и False в противном случае. Если есть несколько кортежей с одним и тем же начальным элементом, то different будет меньше, чем tuples, поэтому будет возвращено False. Если их нет, он вернет True, потому что количество кортежей с разными начальными элементами будет таким же, как и количество кортежей.

17.03.2016
  • Хотя это работает, я не решаюсь принять его, так как я не совсем уверен, что происходит в этом методе. 17.03.2016
  • @hezzag Я был бы рад объяснить это лучше, если хочешь. 17.03.2016
  • @hezzag Добавлено более подробное объяснение. 17.03.2016
  • Новые материалы

    Расистский и сексистский робот, обученный в Интернете
    Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

    Управление состоянием в микрофронтендах
    Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..

    Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
    LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

    Как я опубликовал свое первое приложение в App Store в 13 лет
    Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..

    Что в лицо
    Очерк о возвращении физиогномики и о том, почему мы должны это приветствовать. История начинается со странной науки. Р. Тора Бьорнсдоттир, Николас О. Рул. Видимость социального класса по..

    Почему шаблоны проектирования и почему нет?
    Сложность — мать всех проблем в программировании. Программное обеспечение должно быть разработано с точки зрения того, кто его поддерживает, а не того, кто его пишет, потому что программное..