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
发生,条件是A
1和
,并在此基础上添加了一组括号:)
any(A==B表示A,B表示zip(vars,vals))