我试图制作一个函数,将多个变量与一个整数进行比较,并输出一个三个字母的字符串。我想知道是否有办法将其翻译成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"]
我认为这会处理得更好:
my_dict = {0: "c", 1: "d", 2: "e", 3: "f"}
def validate(x, y, z):
for ele in [x, y, z]:
if ele in my_dict.keys():
return my_dict[ele]
输出:
print validate(0, 8, 9)
c
print validate(9, 8, 9)
None
print validate(9, 8, 2)
e
你可以团结起来
x = 0
y = 1
z = 3
在一个变量中。
In [1]: xyz = (0,1,3,)
In [2]: mylist = []
将我们的条件更改为:
In [3]: if 0 in xyz:
...: mylist.append("c")
...: if 1 in xyz:
...: mylist.append("d")
...: if 2 in xyz:
...: mylist.append("e")
...: if 3 in xyz:
...: mylist.append("f")
输出:
In [21]: mylist
Out[21]: ['c', 'd', 'f']
要检查值是否包含在一组变量中,可以使用内置模块itertools和运算符。
例如:
进口:
from itertools import repeat
from operator import contains
声明变量:
x = 0
y = 1
z = 3
创建值映射(按要检查的顺序):
check_values = (0, 1, 3)
使用itertools允许重复变量:
check_vars = repeat((x, y, z))
最后,使用map函数创建迭代器:
checker = map(contains, check_vars, check_values)
然后,在检查值(按原始顺序)时,使用next():
if next(checker) # Checks for 0
# Do something
pass
elif next(checker) # Checks for 1
# Do something
pass
等
这比lambda x:x in(变量)有优势,因为运算符是一个内置模块,比使用lambda(必须创建自定义就地函数)更快、更高效。
检查列表中是否存在非零(或False)值的另一个选项:
not (x and y and z)
等效值:
not all((x, y, z))