gpt4 book ai didi

Python - 有什么方法可以避免在 for 循环中相互包含多个 if 语句?

转载 作者:太空狗 更新时间:2023-10-29 17:30:18 26 4
gpt4 key购买 nike

我需要一个更好的方法来做到这一点。我是编程新手,但我知道这是一种非常低效的方法,我需要一个函数,我只是不知道该怎么做。有什么建议么?我非常感谢任何帮助!

for H in range(0,len(a_list)):
if a_list[H] > list4[0]:
list5 = [number_list[i]]
if function(list1,list5) == list1[1]:
if function(list2,list5)== list2[1]:
if function(list3,list5)== list3[1]:
if function(list4,list5)== list4[1]:
list5.append(input('some input from the user'))
other_function(list5)
if list5[1]== 40:
print ('something something')
break out of EVERY loop
else:
for H in range(0,len(a_list)):
if a_list[H] > list5[0]:
list6 = [number_list[i]]
if function(list1,list6) == list1[1]:
if function(list2,list6)== list2[1]:
if function(list3,list6)== list3[1]:
if function(list4,list6)== list4[1]:
if function(list5,list6)== list5[1]:
list6.append(input('some input from theuser'))
other_function(list6)
if list6[1]== 40:
print ('something something')
break out of EVERY loop
else:
etc. (one extra comparison every time)

最佳答案

使用 all() function测试多个相关条件:

if all(function(lst, list5) == lst[1] for lst in (list1, list2, list3, list4)):

if all(function(lst, list6) == lst[1] for lst in (list1, list2, list3, list4, list5)):

和嵌套的if语句一样,all()会短路;一旦任何测试失败,立即返回 False

此外,直接循环列表,而不是生成一系列索引。如果你正在使用 break,你也不需要使用 else,移除另一层缩进。

您可以通过过滤 a_list 来删除另一个级别:

for H in filter(lambda H: H > list4[0], a_list):

一起,这减少了你的嵌套:

for H in filter(lambda H: H > list4[0], a_list):
list5 = [number_list[i]]
if all(function(lst, list5) == lst[1] for lst in (list1, list2, list3, list4)):
list5.append(input('some input from the user'))
other_function(list5)
if list5[1]== 40:
print ('something something')
break # out of EVERY loop

for J in filter(lambda J: J >list5[0], a_list):
if all(function(lst, list6) == lst[1] for lst in (list1, list2, list3, list4, list5)):
list6.append(input('some input from theuser'))
other_function(list6)
if list6[1]== 40:
print ('something something')
break # out of EVERY loop

# continue here

大概是你的break语句实际使用异常(raise CustomException() and try:, except CustomException: # break out of所有循环都很快),因为常规的break只会停止当前循环。

如果您不断添加更多列表和嵌套,您可能希望使用一个列表来保存所有这些嵌套列表,然后简单地添加到外部列表:

class EndLoops(Exception): pass

stack = [[number_list[0]]]
try:
for i in number_list[1:]:
for H in filter(lambda H: H > stack[-1][0], a_list):
stack.append([i])
if all(function(lst, stack[-1]) == lst[1] for lst in stack[:-1]):
stack[-1].append(input('some input from the user'))
other_function(stack[-1])
if stack[-1][1] == 40:
print ('something something')
raise EndLoops
except EndLoops:
pass # broken out of outer loop

突然间所有的嵌套都消失了;相反,您将嵌套移动到列表的 stack 列表中。

请注意,我不知道您的代码中最外层的循环是什么样的,我只是在黑暗中进行了一次有根据的尝试,但这个想法应该大致正确。

关于Python - 有什么方法可以避免在 for 循环中相互包含多个 if 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20401260/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com