Автор оригинала: Abhigyan Ojha.
Проверить несколько переменных x
, y
, z
против ценность
В Python используйте выражение Значение в {x, y, z}
Отказ Проверка членства в наборе имеет постоянную сложность времени выполнения. Таким образом, это самый эффективный способ проверить несколько переменных против значения.
Вот код:
Упражнение : Добавьте четвертую переменную и запустите модифицированный код!
В этой статье вы узнаете о интересной проблеме в программировании. Интересно, потому что быстрый взгляд может дать нам чувство этой проблемы простой. Тем не менее, погружение в него может помочь нам узнать некоторые основы о логических операторах и некоторых типах данных таким образом, чтобы мы могли не думать о ранее. На самом деле, вы можете оказаться в этой ситуации, если вы начинаете. Мы постараемся исследовать некоторые решения этой проблемы, используя Python с учетом трех подходов.
- Неправильный подход
- Правильный подход
- Лучший подход
Давайте посмотрим, что некоторые кодовые прохождения, чтобы понять это.
Делать это неправильно – неправильный подход
Давайте рассмотрим вышеуказанные линии кода. У нас есть три переменных, и и хотите распечатать список, «list1» как вывод, который проверяет в строке 9, 11, 13 и 15 соответственно, если либо из X, Y или Z равен 0, 1, 2 или 3 И добавьте в наш выходной список – List1, значения, C, D, E и F на основе условий вывода.
Пауза на мгновение и наблюдать. Что должно быть вывод для вышеуказанных линий кода? Теперь запустите вышеуказанный фрагмент кода. Если вы ожидали, что вывод – [«C», «D», «F»], прочитайте вдоль тщательно.
Давайте узнаем, что происходит с нашим кодом. Чтобы понять это ясно, мы должны сначала оценить несколько вещей. Логические операторы в Python Не работай Таким образом, вы ожидаете, что они будут работать на английском языке. Например, давайте посмотрим на строку 9 фрагмента кода.
Из документации Python ( Boolean Oference Office ), выражение «X или Y» первым оценивает X Отказ Если X верно, его значение возвращается. В противном случае y оценивается, и получаемое значение возвращается.
Второй момент к примечанию здесь о Оператор приоритет . Оператор «или» имеет более низкий приоритет, чем «==» оператор, и, следовательно, равенство оценивается первым.
Линия № 9 возвращает «1» (TRUE) в качестве вывода. Так что строка № 9 и 10 упрощает:
Точно так же линия 11, 13 и 15 каждый возврат 1 в качестве вывода и, следовательно, (следовательно,) «D», «E» и «F» прилагаются к списку. Ниже приведен фрагмент кода показывает вывод для всех условий индивидуально:
Операции и встроенные функции, которые имеют логический результат, всегда возвращают 0 или ложь для ложного и 1 или TRUE для TRUE, если не указано иное. Таким образом, наш окончательный вывод кодового фрагмента на фиг.11 возвращается [«C», «D», «E», «F»]
Делать это правильным способом – правильный подход
Теперь мы строим на наших ошибках выше и посмотрим на решение, которое должно дать нам ожидаемый результат. Давайте немного изменим вышеуказанную фрагмент кода и посмотрите, как он меняет ожидаемый выход:
Здесь разница видно, так как мы используем оператор «X или Y или Z» вместо «X или Y или Z». В этом случае каждая переменная здесь I.E. X, Y, Z проверяется на эквивалентность один за другим, и если условие удовлетворяет, соответствующий алфавит I.E C, D, E, F добавляется в наш список 1 соответственно. Запустите вышеуказанный код и проверьте выход.
Делать это лучшим способом: лучший подход
С Python мы получаем множество типов данных сбора/последовательности и некоторые встроенные ключевые слова, с которыми мы можем работать. Исходное представление о различных типах данных сбора/последовательности и ключевых слов, доступных для нашего использования, является упрощение того, как мы можем создавать коллекцию/последовательность данных и доступ к ним на основе оператора проблемы, с которыми мы имеем дело. Мы проверим две структуры данных – кортежи и наборы, которые приносят пользы для сценария, с которыми мы имеем дело.
Ключевое слово «In» можно использовать вместе с последовательностями, такими как списки, наборы и кортежи. Он возвращает TRUE или FALSE на основе того, найден ли операнд слева или не в последовательности. Давайте проверим фрагмент кода ниже:
Использование кортежей, чтобы сделать это лучше:
В этом случае мы определяем переменные x, y и z, а затем проверяйте для конкретного элементарного членства с корзами в приведенном выше случае. Следовательно, на линии 9 мы проверяем, 0, чтобы быть в кортеже (0, 1, 3), что является проверкой членства, и если условие верно, мы добавляем алфавит «C» в наш список1. Затем проверка членства выполняется для значений 1, 2 и 3 соответственно, и основана на том, является ли условие истинного или ложного, соответствующие значения алфавита «C», «D», «E», «F» добавлены в наш список1.
Чтобы уточнить, в строке 9 мы получаем вывод как True, и, следовательно, «C» добавляется к List1, тогда как на линии 13, где мы проверяем на членство в 2 в кортеже (0, 1, 3), состояние является ложным И, следовательно, «E» не добавляется к list1.
Использование наборов, чтобы сделать это лучше:
Вот код для более легкой копии и вставки:
x = 0 y = 1 z = 3 list1 = [] if 0 in {x, y, z}: list1.append('c') if 0 in {x, y, z}: list1.append('d') if 0 in {x, y, z}: list1.append('e') if 0 in {x, y, z}: list1.append('f') print(list1) # ['c', 'd', 'e', 'f']
Это решение такое же, как и вышеупомянутый раствор с кортежами. Единственное отличие – это структура данных, которую мы используем здесь. С этим решением мы выполняем проверки членства с использованием наборов и на основе условий, являющегося верными или ложными, добавление соответствующего алфавита «C», «D», «E», «F», чтобы перейти в список1.
Я надеюсь, что это объяснение помогает. Попробуйте получить руки грязные, управляющие вышеуказанными фрагментами кода, и вам будет лучше понять, когда вы закончите.
Автор
Эта статья внесла благодаря Finxter Abhigyan Ojha. Вы можете найти свой рабочий профиль здесь.