将“ True”分配给包含一个if语句的for循环,如果for循环为True,则该if语句触发电子邮件

时间:2020-06-03 18:40:45

标签: python pandas for-loop if-statement

mylist = [right_branchcode, right_branchname, right_sellingcode, right_advcorp, right_childparent, \
      right_eliteCategoryId, right_partyid, right_retailmga]
for item in mylist:
      if len(item) > 0:
         print(item)
      else:
        print()

如果for循环打印一个项目,我希望能够返回“ True”。最终目标是触发一个电子邮件通知,其中还包含打印(项目)。我只是不知道如何为包含if语句的for循环分配运算符。

我希望这很清楚。我仍在学习,有时很难表达自己的需求。

谢谢

4 个答案:

答案 0 :(得分:2)

我不确定我是否理解正确,但是您可以简单地在if语句中分配一个变量。

mylist = [right_branchcode, right_branchname, right_sellingcode, right_advcorp, right_childparent, \
      right_eliteCategoryId, right_partyid, right_retailmga]
for item in mylist:
      if len(item) > 0:
         print(item)
         bool_var = True
      else:
        print()
print(bool_var) # It will print true if item is found

您也可以在其中使用return,如果要在找到项目时停止循环,也可以使用break

答案 1 :(得分:2)

循环本身不是对还是错;这是一个流控制语句,而不是表达式。您要查找的是 flag (布尔值变量),其值指示是否打印了非空值。

mylist = [...]
printed_something = False
for item in mylist:
    if item:
        print(item)
        printed_something = True
    else:
        print()

循环完成后,您可以根据需要使用printed_something的值。如果在迭代过程中至少看到一个非空值,则它将仅更改为True

答案 2 :(得分:0)

在循环之前将变量初始化为False。在循环内部,如果您打印任何内容,则将该变量设置为True。最后,在循环结束后,返回变量。

mylist = [... stuff ...]
myflag = False
for item in mylist:
    if len(item) > 0:
        print(item)
        myflag = True
    else:
        print()
return myflag

答案 3 :(得分:0)

最干净的方法是只在循环内执行所需的代码(例如发送或不发送电子邮件)。但是,如果您真的想要分离问题,并将电子邮件发送逻辑与迭代逻辑分离,则可以使用生成器。这与让迭代器返回(yield)值的概念相对应。

mylist = [...]

def iterate_over_list(l):
    for item in l:
        if len(item) > 0:
            yield True


item_iterator = iterate_over_list(mylist)

for item in item_iterator:
    if item:
        print('Send email') # replace with email-sending code
    else:
        print("Don't send email")
相关问题