[英]Python Condition Statement with For-Loop
我正在尝试为以下代码编写一行Python代码:
is_valid = False
for single_object in object_list:
if single_object.test == test:
is_valid = True
if not is_valid:
return 'Bad data!'
我知道必须有一种方法可以用更少的代码来完成此任务。 我的意思是,它是Python!
is_valid = any(o.test == test for o in object_list)
在any(iterable)
函数返回True
,如果任何值的iterable
是True
,且False
,如果他们都不是。 我正在使用“生成器表达式”来遍历object_list
的值并评估条件。
更少的代码通常不是更好的代码。
for single_object in object_list:
if single_object.test == test:
break
else:
return 'Bad data!'
尽管这不是一行代码,但是它更少,更简洁,并且比any
代码都更易于阅读。 速度也基本相同。
仅当break
语句未退出循环时,循环上的else
子句才会执行。
我认为这与一站式解决方案一样是Pythonic。
@Jeremy Banks的解决方案对我来说似乎很完美。 不过,我想再提出一个。 不是为了变得更好(不是),而是为了显示非布尔值问题的替代方案,或者在列表中获取非常精确的对象(可能是为了对其进行修改或删除)是否很重要。
valid_one = next((o.test for o in object_list if o.test == test), None)
if valid_one is None:
# not valid
else:
object_list.remove(valid_one)
# or
valid_one.special_atr = 42
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.