我想检查某个项目是否在列表中,如果没有,我想将其附加到列表中。
通常我会这样写:
if item not in list:
list.append(item)
else:
pass
但是,我已经到了尝试让代码更短的地步,并得到了这个:
list.append(item) if item not in list else list
公平地说,只有 list.append(item) if item not in list 是我自己的创作。 else声明是由于PyCharm的坚持。 现在我的问题是:为什么我不能用 pass 来跟进 else 语句,而必须写 list 来代替。我无法理解它,谷歌也没有提供帮助。
感谢您的澄清。
if
语句和条件表达式之间有区别。
当你写作时
if condition:
this()
else:
that()
您正在撰写声明。它是一个命令式结构——它“做”某事。 else
位是可选的;如果省略,则如果条件不满足,该语句将不执行任何操作。
this if condition else that
构造是一个
表达式。它计算一个值。它总是必须计算一个值,因此
else
位必须存在。使用它的副作用,例如通过调用`list.append(),它不会返回任何有用的东西,是......不完全错误,但是......好吧,这是错误的。不是技术上的,而是哲学上的。因此,当您想要以两种可能的方式之一计算一个值,并且整个内容适合一行左右时,请使用条件表达式。如果您想做两件事中的任何一件,其中一件可能什么都不做,请使用 if 语句。
注意你写的
if temperature < 0:
coat = thick
else:
coat = thin
但是
coat = thick if temperature < 0 else thin
在第一种情况下,您有一个 if 语句,用于选择执行两个赋值语句中的哪一个。在第二种情况下,您有一个赋值语句,它使用条件表达式来决定分配哪个值。
表达式可以用作语句(在这种情况下,它们的值将被忽略),但语句没有值,因此不能用作表达式。
else
语句是多余的,即
if item not in a_list:
list.append(item)
就足够了,并且尽可能简短和惯用(不过,您可能想尝试一下集合来提高性能)。
在第二个片段中,您使用条件
表达式 附加到列表,这不是这些表达式的用途。无论条件如何,条件表达式都必须有一个值,而 pass
不是值。除非您需要根据条件计算值,否则请像上面一样使用条件
语句。
pass 是一个空操作——当它被执行时,什么也没有发生。当语法上需要语句但不需要执行任何代码时,它作为占位符很有用,例如:
在Python中,如果您使用
def f(arg): pass # a function that does nothing (yet)
ternary
运算符解释,这是不允许的,因此在
else
中您需要做一些事情。所以你的解决方案是:
if item not in list:
list.append(item)
或使用
set()
set.add(item)
and
运算符
进一步缩短代码
item not in list and list.append(item)
如果
list.append(item)
返回
item not in list
,它只会执行
True