How to test multiple variables for equality against a single value?(如何针对单个值测试多个变量的相等性?)
问题描述
我正在尝试创建一个函数,该函数将多个变量与一个整数进行比较,并输出一个由三个字母组成的字符串。我想知道有没有办法把它翻译成Python。所以说:
x = 0
y = 1
z = 3
mylist = []
if x or y or z == 0 :
mylist.append("c")
if x or y or z == 1 :
mylist.append("d")
if x or y or z == 2 :
mylist.append("e")
if x or y or z == 3 :
mylist.append("f")
这将返回以下列表:
["c", "d", "f"]
这样的事情可能吗?
推荐答案
您误解了布尔表达式的工作方式;它们的工作方式不同于英语句子,您猜测您在这里谈论的是对所有名称进行相同的比较。您正在寻找:
if x == 1 or y == 1 or z == 1:
x和y以其他方式单独评估(False如果0,True否则)。
您可以使用包含测试来缩短a tuple:
if 1 in (x, y, z):
或更好:
if 1 in {x, y, z}:
使用a set利用不变成本成员资格测试(即,无论左操作数是什么,in都需要固定的时间)。
说明
当您使用or时,Python将运算符的每一侧视为单独的表达式。表达式x or y == 1首先被视为x的布尔测试,如果为假,则测试表达式y == 1。
这是由于operator precedence。or运算符的优先级低于==测试,因此将首先评估测试。
但是,即使不是这种情况,表达式x or y or z == 1实际上被解释为(x or y or z) == 1,这仍然不会达到您预期的效果。
x or y or z将计算为第一个‘true’参数,例如,不是False、数字0或空(有关在布尔上下文中Python认为是False的详细信息,请参阅boolean expressions)。
因此,对于值x = 2; y = 1; z = 0,x or y or z将解析为2,因为这是参数中的第一个类似TRUE的值。则2 == 1将是False,即使y == 1将是True。
同样适用于相反的情况;针对单个变量测试多个值;x == 1 or 2 or 3会因为同样的原因而失败。使用x == 1 or x == 2 or x == 3或x in {1, 2, 3}。
这篇关于如何针对单个值测试多个变量的相等性?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何针对单个值测试多个变量的相等性?
基础教程推荐
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- 将 x 轴刻度更改为自定义字符串 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- 用 Python 编写 Fortran 无格式文件 2022-01-01
