我试图制作一个函数,将多个变量与一个整数进行比较,并输出一个三个字母的字符串。我想知道是否有办法将其翻译成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"]
还有一种方法:
x = 0
y = 1
z = 3
mylist = []
if any(i in [0] for i in[x,y,z]):
mylist.append("c")
if any(i in [1] for i in[x,y,z]):
mylist.append("d")
if any(i in [2] for i in[x,y,z]):
mylist.append("e")
if any(i in [3] for i in[x,y,z]):
mylist.append("f")
它是列表理解和任何关键字的混合。
如果您非常懒惰,可以将值放入数组中。例如
list = []
list.append(x)
list.append(y)
list.append(z)
nums = [add numbers here]
letters = [add corresponding letters here]
for index in range(len(nums)):
for obj in list:
if obj == num[index]:
MyList.append(letters[index])
break
你也可以把数字和字母放在字典里,这样做,但这可能比简单的if语句复杂得多。这就是你试图变得特别懒惰的原因:)
还有一件事,你的
if x or y or z == 0:
将编译,但不是以您希望的方式编译。当您简单地将变量放入if语句中时(示例)
if b
程序将检查变量是否为空。写上述语句的另一种方式(更有意义)是
if bool(b)
Bool是python中的一个内置函数,它基本上执行验证布尔语句的命令(如果你不知道这是什么,那就是你现在想在If语句中做的:)
我发现的另一种懒惰方式是:
if any([x==0, y==0, z==0])
你可以团结起来
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']
此代码可能有帮助
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;
正如这个答案所解释的那样,or并不是那样工作的。
而通用答案将被使用
if 0 in (x, y, z):
...
这不是解决具体问题的最佳方法。在您的案例中,您正在进行重复测试,因此值得编写一组变量:
values = {x, y, z}
if 0 in values:
mylist.append("c")
if 1 in values:
mylist.append("d")
我们可以使用字典来简化这一点-这将产生相同的值:
mappings = {0: "c", 1: "d", ...}
for k in mappings:
if k in values:
mylist.append(mappings[k])
或者,如果mylist的顺序是任意的,则可以循环这些值,并将它们与映射匹配:
mappings = {0: "c", 1: "d", ...}
for v in (x, y, z):
if v in mappings:
mylist.append(mappings[v])