繁体   English   中英

带条件循环的Python条件语句

[英]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 ,如果任何值的iterableTrue ,且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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM