Каков наилучший способ проверить, имеет ли кортеж значения empty / None в Python?

каков наилучший / наиболее эффективный способ проверить, все ли значения кортежей? Нужно ли повторять все элементы кортежа и проверять или есть еще лучший способ?

например:

t1 = (1, 2, 'abc')
t2 = ('', 2, 3)
t3 = (0.0, 3, 5)
t4 = (4, 3, None)

проверка этих кортежей, каждый кортеж, кроме t1, должно возвращать True, что означает, что существует так называемое пустое значение.

P. S. Есть такой вопрос: проверьте, содержит ли кортеж только None значения с Python, но только о значениях None

4 ответов


Это очень легко:

not all(t1)

возвращает False только если все значения в t1 непустые / ненулевые и не None. all короткие замыкания, поэтому он должен только проверить элементы до первого пустого, что делает его очень быстрым.


ответ, используя все было предоставлено:

not all(t1)

однако в таком случае, как t3, это вернет True, потому что одно из значений равно 0:

t3 = (0.0, 3, 5)

встроенное ключевое слово " all " проверяет, являются ли все значения данной итерации значениями, которые оцениваются как отрицательное логическое (False). 0, 0.0", и ни один из них не оценивается как False.

Если вы хотите проверить только None (как следует из названия вопроса), это работает:

any(map(lambda x: x is None, t3))

Это возвращает True, если ни один из элементов t3 не является None, или False, если ни один из них не является.


для вашего конкретного случая, вы можете использовать all() функция, она проверяет все значения списка true или false, обратите внимание на python None, пустая строка и 0 считаются ложными.

так

>>> t1 = (1, 2, 'abc')
>>> t2 = ('', 2, 3)
>>> t3 = (0.0, 3, 5)
>>> t4 = (4, 3, None)
>>> all(t1)
True
>>> all(t2)
False
>>> all(t3)
False
>>> all(t4)
False
>>> if '':
...     print("Hello")
...
>>> if 0:
...     print("Hello")

Если хотите проверить, есть ли пустое значение в кортеж кортежей, содержащих такие:

t1 = (('', ''), ('', ''))
t2 = ((0.0, 0.0), (0.0, 0.0))
t3 = ((None, None), (None, None))

вы можете использовать это:

not all(map(lambda x: all(x), t1))

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

any(map(lambda x: any(x), t1))