Python Mulitple用于带有公共else的循环

Python Mulitple用于带有公共else的循环,python,list,for-loop,if-statement,Python,List,For Loop,If Statement,我现在的代码有两个列表练习和体重。它们都包含生成的输入框的内容。当列表保存到数据库时,我需要确保没有提交空框,为了解决这个问题,我正在编写一个验证算法来检查是否有空框,这是迄今为止的代码: for item in Exercise: if item == '': self.CreateError.configure(fg = "red") connection.commit() for item in Weight: if item == '':

我现在的代码有两个列表
练习
体重
。它们都包含生成的输入框的内容。当列表保存到数据库时,我需要确保没有提交空框,为了解决这个问题,我正在编写一个验证算法来检查是否有空框,这是迄今为止的代码:

for item in Exercise:
    if item == '':
        self.CreateError.configure(fg = "red")
        connection.commit()

for item in Weight:
    if item == '':
        self.CreateError.configure(fg = "red")
        connection.commit()
else:
    values = zip(Exercise, Weight, ID)
    cursor.executemany("INSERT INTO Exercises(Exercise, Weight, ID) VALUES(?, ?, ?)", values)        
    connection.commit()

我的问题是我有两个for循环,它们都具有相同的
else
。但是,我不知道如何创建它,因此如果列表中的两个项目都为空,则会激活
else

更好的方法是使用
any
功能:

if any(i == '' for i in Exercise) or any(i == '' for i in Weight):
    self.CreateError....
else:
    values = zip(...

这种方法的缺点是,如果您必须迭代更多的集合(除了运动、体重等),那么它可能不是最具可伸缩性的。但是,这种风格的一种变体可以弥补这一缺陷(编辑:查看@Thierry Lathuille的答案)

更好的方法是使用
any
函数:

if any(i == '' for i in Exercise) or any(i == '' for i in Weight):
    self.CreateError....
else:
    values = zip(...

这种方法的缺点是,如果您必须迭代更多的集合(除了运动、体重等),那么它可能不是最具可伸缩性的。然而,这种风格的一种变体可以弥补这一缺陷(编辑:查看@Thierry Lathuille的答案)

您可以在这里使用
任何

if any(item == '' for item in Exercise) or any(item == '' for item in Weight):
    self.CreateError.configure(fg = "red")
else:
    values = zip(Exercise, Weight, ID)
    cursor.executemany("INSERT INTO Exercises(Exercise, Weight, ID) VALUES(?, ?, ?)", values)        
connection.commit()

您可以在此处使用
任何

if any(item == '' for item in Exercise) or any(item == '' for item in Weight):
    self.CreateError.configure(fg = "red")
else:
    values = zip(Exercise, Weight, ID)
    cursor.executemany("INSERT INTO Exercises(Exercise, Weight, ID) VALUES(?, ?, ?)", values)        
connection.commit()

当你在运动和体重项目上测试相同的条件时,你可以这样做:

from itertools import chain

if any(item == '' for item in chain(Exercise, Weight)):
    self.CreateError.configure(fg = "red")
    connection.commit()

else:
    values = zip(Exercise, Weight, ID)
    cursor.executemany("INSERT INTO Exercises(Exercise, Weight, ID) VALUES(?, ?, ?)", values)        
    connection.commit()

当你在运动和体重项目上测试相同的条件时,你可以这样做:

from itertools import chain

if any(item == '' for item in chain(Exercise, Weight)):
    self.CreateError.configure(fg = "red")
    connection.commit()

else:
    values = zip(Exercise, Weight, ID)
    cursor.executemany("INSERT INTO Exercises(Exercise, Weight, ID) VALUES(?, ?, ?)", values)        
    connection.commit()

问题是你不想复制一个“else”对吗?不,如果我复制了else,那么如果其中一个项为空,它仍然会插入数据库。问题是你不想复制一个“else”,对吗?不,如果我复制了else,那么如果其中一个项为空,它仍然会插入数据库。对不起,missed@sshashank124 AnswerAlway(仅为干燥起见),
连接。提交()
只能写入一次(在
if else
之外)。抱歉,missed@sshashank124 AnswerAlway(仅为干燥起见),
连接。提交()
只能写入一次(在
if else
之外)实际上我更喜欢@Thierry的变体而不是这个我更喜欢@Thierry的变体