<p>使用<a href="http://docs.python.org/2/library/functions.html#all" rel="noreferrer">^{<cd1>} function</a>测试多个相关条件:</p>
<pre><code>if all(function(lst, list5) == lst[1] for lst in (list1, list2, list3, list4)):
</code></pre>
<p>以及</p>
<pre><code>if all(function(lst, list6) == lst[1] for lst in (list1, list2, list3, list4, list5)):
</code></pre>
<p>就像嵌套的<code>if</code>语句一样,<code>all()</code>将短路;一旦任何测试失败,返回<code>False</code>。</p>
<p>此外,直接循环列表,而不是生成一系列索引。如果您使用的是<code>break</code>,那么也不需要使用<code>else</code>,删除另一级别的缩进。</p>
<p>您可以通过筛选<code>a_list</code>删除另一个级别:</p>
<pre><code>for H in filter(lambda H: H > list4[0], a_list):
</code></pre>
<p>总之,这将减少您的嵌套:</p>
<pre><code>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
</code></pre>
<p>假设您的<code>break</code>语句实际使用异常(<code>raise CustomException()</code>和<code>try:</code>,<code>except CustomException: # break out of all the loops fast</code>),因为常规的<code>break</code>只会停止当前循环。</p>
<p>如果继续添加更多列表和嵌套,可能需要使用列表来保存所有这些嵌套列表,然后只需添加到外部列表:</p>
<pre><code>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
</code></pre>
<p>突然之间,所有的嵌套都消失了;相反,您将嵌套移到了列表列表的<code>stack</code>列表中。</p>
<p>请注意,我不知道在您的代码中最外层的循环是什么样子的,我只是在黑暗中接受了教育,但这个想法应该大致正确。</p>