Python 如何使嵌套的IF语句更整洁

Python 如何使嵌套的IF语句更整洁,python,if-statement,Python,If Statement,这个问题可以用独立于语言的方式提出,但我是在python的上下文中提出的,因为不同的语言会有不同的细微差别 我认识到这与类似,但我认为我的不同之处在于,我问的是一种情况,即将两个条件放在带有&的相同if语句中会产生错误 假设我想看看abc[x]是否等于'fish',但假设我不确定len(abc)是否等于x。如果abc[x]=='fish',我不能只使用,因为它可能超出了索引范围。因此,我需要这样做 if len(abc)>x: if abc[x]=='fish':

这个问题可以用独立于语言的方式提出,但我是在python的上下文中提出的,因为不同的语言会有不同的细微差别

我认识到这与类似,但我认为我的不同之处在于,我问的是一种情况,即将两个条件放在带有
&
的相同if语句中会产生错误

假设我想看看
abc[x]
是否等于'fish',但假设我不确定
len(abc)
是否等于x。如果abc[x]=='fish',我不能只使用
,因为它可能超出了索引范围。因此,我需要这样做

if len(abc)>x:
    if abc[x]=='fish':
        dostuff
    else:
        dootherstuff
else:
    dootherstuff
有没有一种更干净的方法来做到这一点,我没有另外两个语句来完成相同的
dootherstuff
?如果我想更改
dootherstuff
的内容,我必须在两个地方都更改,但到那时我可能会忘记。当然,我可以试着在以后对代码进行注释以提醒自己,或者让
dootherstuff
成为一个函数,但这似乎仍然是第二好的。很多时候,当我完成这项工作时,
dootherstuff
仅仅是一行代码,因此即使它解决了后续的更改场景,也不会让我感觉更好。

当然,这里是:

if len(abc) > x and abc[x] == 'fish':
    dostuff
else:
    dootherstuff
短路,因此只有当
len(abc)>x
True
时才会对
abc[x]==“fish”
进行评估。大多数语言都有类似的运算符(例如C中的
&&


&
表示按位“and”,并且不会短路,所以不要使用它

您完全可以使用逻辑
运算符组合这两个条件。包括Python在内的大多数(如果不是全部的话)现代编程语言都使用这种语言。也就是说,一步一步地处理表达式,不计算它们不需要的部分。这里,如果
表达式的左侧是
False
,则整个过程将是
False
,并且不需要计算右侧,因此,类似这样的内容将是完全安全的:

if len(abc)>=x and abc[x]=='fish':
    dostuff
else:
    dootherstuff

试一试怎么样?一般来说,如果长度在大多数时间内都在限制范围内,则速度也会更快。是Python中的一个短路运算符-听起来非常适合您的用途。备选建议:尝试“if all()”:
if all([condition1,condition2])
环绕try,只替换外部if-else,我仍然会做
dootherstuff
两次。@kindall,如果
x
恰好是
len(abc)
,这不会在
abc[x]时仍然导致索引超出范围异常==='fish'
被选中,因为
len(abc)>=x
的计算结果为真?是的,但这和原来的问题是一样的。我没有意识到这是有效的。我知道这在VBA中不起作用,但我想这是我的错,因为我把VBA的错误假定到了其他语言上。@Alejandro说得好,我习惯于R,其中列表和向量从1开始,而不是从0开始。将
=
更改为
though@DeanMacGregor:是的,假设像VBA这样的任何其他语言都会让你陷入困境。:-)