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的变体