Python 使用一个标志变量创建一组规则
我有一个这样的代码:Python 使用一个标志变量创建一组规则,python,python-2.7,Python,Python 2.7,我有一个这样的代码: flag = 0 if A == 'string1': flag = 1 if B == 'string2': flag = 1 if C == 'string3': flag = 1 vars = [A, B, C] vals = ['string1', 'string2', 'string3'] flag = any([vars[i] == vals[i] for i in range(len(vars)) ]) 是否有办法创建我要检查的规则
flag = 0
if A == 'string1':
flag = 1
if B == 'string2':
flag = 1
if C == 'string3':
flag = 1
vars = [A, B, C]
vals = ['string1', 'string2', 'string3']
flag = any([vars[i] == vals[i] for i in range(len(vars)) ])
是否有办法创建我要检查的规则列表,检查是否至少有一个是真的,并将flag
设置为1?比如说,
D = [A == 'string1', B == 'string2', C=='string3']
if D:
flag = 1
或者简单地指定布尔表达式的结果:
flag = A == 'string1' or \
B == 'string2' or \
C == 'string3'
最后一个将为标志
提供正确的值,True
或False
如果需要变量和值的列表,请尝试以下操作:
flag = 0
if A == 'string1':
flag = 1
if B == 'string2':
flag = 1
if C == 'string3':
flag = 1
vars = [A, B, C]
vals = ['string1', 'string2', 'string3']
flag = any([vars[i] == vals[i] for i in range(len(vars)) ])
。。。或者为这些相同的项目编一本词典(由codeharts
提供):
。。。或zip
根据第二次世界大战将列表分成成对(元组):
flag = any(a == b for a, b in zip(vars, vals))
您可以根据需要扩展列表大小。这假设每个“规则”只是检查成对的值。您可以使用任何:
if any((A == 'string1', B == 'string2', C=='string3')):
flag = 1
你就快到了
D = [A == 'string1', B == 'string2', C=='string3']
if True in D:
flag = 1
D具有每个测试的布尔值,如果其中任何一个为真,则在D测试中为真
编辑:我在一年前写过这篇文章,但最近有人对它进行了投票,现在回想起来,我知道有一个内置的可以节省一些击键次数
我们可以将上面的代码编写为
D = [A == 'string1', B == 'string2', C=='string3']
if any(D):
flag = 1
如果你想要的是可重用性,你可以创建一个类似于你所拥有的函数,把它们封装在一个列表中,甚至更简单
flag=any((a==“str1”,B==“str2”,C==“str3”))
好吧,正如@Rawing前面提到的,“OP要求标志等于1,不是真的”(但我99%肯定你是对的,布尔值会更好地匹配OP的代码=)那么flag=int(any((A==“str1”,B==“str2”,C==“str3”))
@rth我不能反对BDFL,所以你的代码是正确的。这可以调整,让flag=1
发生,条件是A1和
,并在此基础上添加了一组括号:)any(A==B表示A,B表示zip(vars,vals))