#python #comparison #chunks
Вопрос:
У меня есть следующий вывод:
[3, 3, 3], [4, 4, 4], [2, 4, 4], [4, 5, 1], [5, 5, 5], [2, 4, 3], [5, 5, 1], [4, 5, 4], [4, 5, 1], [2, 2, 2], [3, 3, 3], [5, 5, 5], [2, 2, 2], [3, 5, 3], [2, 2, 2], [1, 3, 1], [3, 3, 2], [2, 4, 4], [5, 5, 5], [3, 5, 3].
Как я могу протестировать с помощью python каждый фрагмент, используя следующую формулу:
- Первое число куска меньше или равно третьему числу куска больше или равно второму числу куска?
Так что я могу проверить, например, первый блок и, если третье число в пределах первого и второго (напр. число 5 3-й ряд и 1-й ряд является число 2 и 2-й ряд-это число 8. т. е. число 5 находится в диапазоне от 2 до 8.) Я могу распечатать
True
илиFalse
Комментарии:
1.
[i[2] in range(i[0], i[1] 1) for i in [your-input-of-lists-goes-here]]
2. @GhostOps, от которого у меня болят глаза….
3. я знаю, но в операции не упоминается, что это один массив или ввод, так что вот почему я это сделал, спасибо за это
4. О, это справедливо. Такие вещи вы тоже можете найти в коде, развернутом моим университетом 😉
5. @GhostOps — То
True
иFalse
не нужно.i[2] in range(i[0], i[1] 1))
уже возвращает логические значения.
Ответ №1:
Сравнение более эффективно, чем использование in range(...)
all([start <= num and num <= end for start, end, num in lst])
Тестирование производительности
Ввод:
lst = [[i, i 1, i 1] for i in range(1000)]
С in range(...)
:
Код:
%timeit [l[-1] in range(l[0], l[1] 1) for l in lst]
print(all([l[-1] in range(l[0], l[1] 1) for l in lst]))
Выход:
1.22 ms ± 161 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
True
С помощью сравнения
Код:
%timeit [start <= num and num <= end for start, end, num in lst ]
print(all([start <= num and num <= end for start, end, num in lst ]))
Выход:
258 µs ± 29.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
True
Ответ №2:
Воспользуйся range
:
lst = [3, 3, 3], [4, 4, 4], [2, 4, 4], [4, 5, 1], [5, 5, 5], [2, 4, 3], [5, 5, 1], [4, 5, 4], [4, 5, 1], [2, 2, 2], [3, 3, 3], [5, 5, 5], [2, 2, 2], [3, 5, 3], [2, 2, 2], [1, 3, 1], [3, 3, 2], [2, 4, 4], [5, 5, 5], [3, 5, 3]
>>> [l[-1] in range(l[0], l[1] 1) for l in lst]
[True, True, True, False, True, True, False, True, False, True,
True, True, True, True, True, True, False, True, True, True]
Или comparisons
:
>>> [l[0]<=l[1]<=l[-1] for l in lst]
[True, True, True, False, True, True, False, True, False, True,
True, True, True, True, True, True, False, True, True, True]