如果X或Y或Z那么使用*那*一个?

Bru*_*yne 8 python python-3.x

有没有办法编写一个If可以有多个参数的(或等效的)语句,如果其中任何一个满足逻辑,那么使用变量?

例如

if len(x) == 1 or len(y) == 1 or len(z) == 1 or ... len(zz) == 1:
    # do something with the variable that met the condition
Run Code Online (Sandbox Code Playgroud)

所以说只有z长度1,我可以用第一个True答案并使用它的方式写出上面的想法/公式吗?

所以像

x = "123"
y = "234"
z = "2"
xx = "1234"
yy = "12345"

if len(x) == 1 or len(y) == 1 or len(z) == 1 or len(xx) == 1 or len(yy) == 1:
    #do something with the variable that satisfies the condition, so `z` in this case.
Run Code Online (Sandbox Code Playgroud)

这有任何意义吗?变量的长度可以随时改变,所以我希望能够说"如果满足任何条件,使用符合条件的变量"......?

在上文中,我事先并不知道z将是唯一符合标准的人,所以我的Then陈述不能z = "new value"或不管我想做什么.

编辑:对不起,每条评论我都知道检查len整数是不行的.这仅仅是为了说明目的,这是我第一次想到"测试".对不起,如果len有点困惑.我主要只是想看看我是否可以使用If语句(或相关语句),我不知道哪些变量符合条件.(我对python仍然是新的,所以我对我缺乏语义或适当的术语表示诚挚的道歉).我想elif尽可能地避免因为它可以变得啰嗦.(但如果这是最pythonic的方式,那就这样吧!)

ere*_*non 11

虽然@pault的答案解决了你的问题,但我认为它不具有超级可读性.如果你只有几个变量,pythons mantra指示一种简单明了的方式:

if len(x) == 1:
  f(x)
elif len(y) == 1:
  f(y)
elif len(z) == 1:
  f(z)
Run Code Online (Sandbox Code Playgroud)

否则,如果你有一个列表,for循环是可读和有效的:

for l in ls:
    if len(l) == 1:
        f(l)
        break
Run Code Online (Sandbox Code Playgroud)


pau*_*ult 9

您可以next在此处使用从符合条件的选项列表中选择第一项:

value = next((item for item in [x, y, z] if len(item)==1), None)
if value is not None:
    ...
Run Code Online (Sandbox Code Playgroud)

next()如果没有值符合您的条件,则第二个参数为默认值.