找出 or 语句的哪一部分符合条件?

Figure out which part of or statement matches condition?

我有一个基本的 python 问题。我在 google 中搜索但找不到答案。我想知道当我在 if condition 中使用 or 时,是否有任何方法可以在以下示例中查看 if 条件的哪一部分是正确的。

我有清单:my= ['A','B','C']

if 'S' in my or 'T' in my or 'C' in my:
    print('yes')     # now I wanna know which one is correct. the answer here is `C`

注意:我知道我可以使用 for 遍历 my 的元素来找出答案。我想知道是否有相应的键码。

您必须隔离每个表达式,以便稍后对其进行测试:

my = ['A','B','C']

S = 'S' in my
T = 'T' in my
C = 'C' in my
if S or T or C:
    # Now examine S, T and C separately
    print('yes')

考虑以下 any 的用法。如果能写

就好了
# NameError on print(x)
if any(x in my for x in ['S', 'T', 'C']):
    print(x)

except x 仅在生成器表达式的范围内。但是,您可以使用赋值表达式来捕获对 x 的最后一次赋值,以便在 any returns.

之后使用
if any((witness := x) in my for x in ['S', 'T', 'C']):
    print(witness)

witness重复设置为x;当比较最终成功时,any 停止进行比较,因此 witness 保留设置为最后检查的值。

由于重复代码和any都已经在其他答案中,我认为值得提供另一个角度作为单行示例if:

print('S' if 'S' in my else 'T' if 'T' in my else 'C' if 'C' in my else 'Nothing')

或者,如果您不介意循环,单行代码可以如下所示:

print([char for char in 'STC' if char in my][0])  # Would throw IndexError if not found

重复海象一:

if (x := 'S') in my or (x := 'T') in my or (x := 'C') in my:
    print('yes', x)

您的列表会打印 yes C

我看到 chepner 已经发布了一个类似的。我的有更多的代码重复,但具有惰性的优点,只计算需要的表达式,直到第一次命中。

Try it online!