我试图制作一个函数,将多个变量与一个整数进行比较,并输出一个三个字母的字符串。我想知道是否有办法将其翻译成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"]
问题
而测试多个值的模式
>>> 2 in {1, 2, 3}
True
>>> 5 in {1, 2, 3}
False
非常易读,在许多情况下都可以使用,但有一个陷阱:
>>> 0 in {True, False}
True
但我们希望
>>> (0 is True) or (0 is False)
False
解决方案
前面表达式的一个概括是基于ytpilai的答案:
>>> any([0 is True, 0 is False])
False
可以写成
>>> any(0 is item for item in (True, False))
False
虽然此表达式返回正确的结果,但其可读性不如第一个表达式:-(
写x或y或z==0的直接方法是
if any(map((lambda value: value == 0), (x,y,z))):
pass # write your logic.
但我认为,你不喜欢这种方式很难看。
另一种方式(更好)是:
0 in (x, y, z)
顺便说一句,很多如果可以写成这样
my_cases = {
0: Mylist.append("c"),
1: Mylist.append("d")
# ..
}
for key in my_cases:
if key in (x,y,z):
my_cases[key]()
break
此代码可能有帮助
L ={x, y, z}
T= ((0,"c"),(1,"d"),(2,"e"),(3,"f"),)
List2=[]
for t in T :
if t[0] in L :
List2.append(t[1])
break;