“全称”和“存在”的定义
- 全称:所有的逻辑表达式都为True,才为True;
- 只要有一个为False,即为False。
- 存在:任意一个逻辑表达式为True,就为True;
- 所有都是False,才为False。
all
函数,以一个可迭代对象为参数- 迭代到第一个False,即返回False;
- 迭代结束,返回True。
any
函数,以一个可迭代对象为参数- 迭代到第一个True,即返回True;
- 迭代结束,返回False。
example1
# 掷骰子,连续三次,看看三次全6,
# 和三次至少1个6的概率分别是多少?
from random import randint
n, triple, once = 10000, 0, 0
for i in range(n):
bet = [randint(1, 6) for k in range(3)]
if all(x==6 for x in bet):
triple += 1
if any(x==6 for x in bet):
once += 1
print(f"投掷{n}次")
print(f"--三次6为{triple}次,占比{triple/n*100:.1f}%;")
print(f"--至少一次6为{once}次,占比{once/n*100:.1f}%。")
“短路”特性
- 对于all函数,只要碰到第一个False,就返回False;
- 对于any函数,只要碰到第一个True,就返回True;
- 结合生成器推导式的“惰性计算”特点,可以提高程序性能。
# 超级素数:一个数所有的前缀都是素数
# 如:2333是超级素数,因为2,23,233,2333都是素数
def is_prime(n):
if n < 2:
return False
for k in range(2, int(n ** 0.5) + 1):
if n % k == 0:
return False
return True
def is_super_prime(n):
sn = str(n)
return all(is_prime(int(sn[: i + 1])) for i in range(len(sn)))
print(2333, is_super_prime(2333))
print(111, is_super_prime(111))
example2
# 列表中是否存在指定值t,如果存在则返回下标
from random import randint
alist = [randint(1, 100) for i in range(50)]
has_42 = any(alist[(k := i)]==42 for i in range(50))
if has_42:
print(f"Yes, index=={k}")
else:
print("No")
标签:False,函数,迭代,range,print,True,any
From: https://www.cnblogs.com/coco02/p/16891208.html