[英]Python3: for-loop break and else (if statement)
嘿,我要执行以下操作:我有一本以ID为键的字典,以各种东西为值的列表。 值的一项是字符串 。 我想检查列表中是否包含此字符串 。 我想对字典中的所有键执行此操作。
到现在为止还挺好。
此外,我要检查的列表取决于用户的一个控制台输入,该输入指定应检查的列表。 控制台输入为“ number” 。
我的想法是使用嵌套的for循环遍历我的字典和列表,并比较字符串(值的项目)是否等于任何列表项。 如果是这样,我想跳出循环。 如果在列表中找不到字符串,则我想执行else语句以打印我的“字符串无效”消息。
def validationHelper(myDict, myList):
for key in myDict:
for value in myDict[key][0]:
for item in myList:
if value==item:
validationHelper.true="String is valid"
break
else:
validationHelper.true="Warning: String is NOT valid"
def validation(anyList,helperfunc):
if anyList=="one":
return helperfunc(finalDict,myList1)
if anyList=="two":
return helperfunc(finalDict,myList2)
if anyList=="three":
return helperfunc(finalDict,myList3)
validation(number, validationHelper)
print(validationHelper.true)
我正在运行此命令,但是无论字符串是否在列表中,我总是为else语句获取打印输出。 所以,我想我在for循环中推理时会出错吗? 也许,我根本不了解for循环?! 我已经用else语句尝试了不同的缩进,但是无法解决我的问题。
我建议您按以下方式更改功能(不更改逻辑):
def validationHelper(myDict, myList):
for key in myDict:
for value in myDict[key][0]:
for item in myList:
if value==item:
return "String is valid" # Add here to exit
return "Warning: String is NOT valid" # will be returned inf nothing will be found in your 3 loops
def validation(anyList,helperfunc):
if anyList=="one":
return helperfunc(finalDict,myList1)
if anyList=="two":
return helperfunc(finalDict,myList2)
if anyList=="three":
return helperfunc(finalDict,myList3)
validation(number, validationHelper)
print(validationHelper)
如注释中所述,这将帮助您退出3个嵌套循环。
因为在否定情况下,如果第一次发生错误,则无需检查其他任何内容。
使用return中断所有循环。 如果您没有任何if语句,则不必使用else语句。
def validationHelper(myDict, myList):
for item in myList:
if item in myDict.values():
return ("String is valid")
return ("String is NOT valid")
def validation(anyList,helperfunc):
if anyList=="one":
return helperfunc(finalDict,myList1)
elif anyList=="two":
return helperfunc(finalDict,myList2)
elif anyList=="three":
return helperfunc(finalDict,myList3)
validation(number, validationHelper)
print(validationHelper.true)
最好使用elif而不是多个if。 下次请小心缩进。
另外,您可能想检查.keys()和.values()
您可以替换:
for key in myDict:
for value in myDict[key][0]:
有:
for value in myDict.values():
其他答案很好地解释了如何摆脱多个循环。 但是您也可以使用Python的内置函数和列表推导来简化代码,如下所示:
def validationHelper(myDict, myList):
if any(v in myList for val in myDict.values() for v in val[0]):
validationHelper.true="String is valid"
else:
validationHelper.true="Warning: String is NOT valid"
def validation(anyList,helperfunc):
if anyList=="one":
return helperfunc(finalDict,myList1)
if anyList=="two":
return helperfunc(finalDict,myList2)
if anyList=="three":
return helperfunc(finalDict,myList3)
validation(number, validationHelper)
print(validationHelper.true)
这应该是因为你的代码效率,因为any
在第一场比赛短路。 而且它可能更具可读性。 (请注意,多级列表理解的顺序与常规for
循环的顺序相同。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.