python: найти пропущенное значение в массиве во время цикла while - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть while l oop, которое проходит фиксированный шаг и постоянно проверяет, не совпадает ли значение в массиве со счетчиком while l oop, и печатает это число:

import numpy as np

values = [60.0, 75.8, 85.0, 90.0]
values = np.asarray(values)
counter = 50
while counter <= 100:
    closest = (np.abs(values - counter)).argmin()
    if (values[closest] > (counter - 1) and values[closest] <counter):
        print("we skipped a value " + str(values[closest]))
    counter = counter + 1

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

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

Это позволяет избежать зацикливания и выводит список пропущенных значений:

print("skipped values: " + str(values[np.isin(values, range(50, 101), invert=True)]))

numpy.isin возвращает значения из первого аргумента, которые находятся во втором аргументе. Установка invert в True означает возврат всего, что не во втором аргументе.

1 голос
/ 24 февраля 2020

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

for v in sorted(set(values).difference(range(50, 101))):
    print("we skipped a value " + str(v))

Создает set из values, удаляет каждый элемент между 50 и 100 включительно, затем печатает все оставшиеся значения в порядке возрастания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...