Python 而在ran=ran[:-1]的范围(0,5)上循环;跑!=[]总是正确的

Python 而在ran=ran[:-1]的范围(0,5)上循环;跑!=[]总是正确的,python,python-3.x,Python,Python 3.x,我有一个非常简单的Python代码,无法理解循环为什么不会停止。我特别想在函数中使用一个helper函数。有什么想法吗 def x(): a = range(0,5) def y(ran): while ran != []: ran = ran[:-1] print(ran) return y(ran) return y(a) x() Python并不是根据您的范围生成列表(节

我有一个非常简单的Python代码,无法理解循环为什么不会停止。我特别想在函数中使用一个helper函数。有什么想法吗

def x():
    a = range(0,5)

    def y(ran):
        while ran != []:
            ran = ran[:-1]
            print(ran)
            return y(ran)

    return y(a)

x()

Python并不是根据您的范围生成列表(节省时间和内存),它只是使用a来定义数字的范围

当您执行
ran=ran[:-1]
时,它返回一个新的范围。第一次运行此命令时,首先从
ran=range(0,5)
,然后是
ran[:-1]==range(0,4)
,然后是
range(0,3)
,依此类推。它从不终止,因为它最终在
范围(0,0)
处触底,但这并不等于
[]


您可以通过在运行时将测试更改为
,来解决此问题!=范围(0,0):
(在Python3.3+中),或者更简单地说,在运行时
因为
范围(0,0)
的计算结果为
False

Python并没有从您的范围生成列表(节省时间和内存),它只是使用a来定义数字的范围

当您执行
ran=ran[:-1]
时,它返回一个新的范围。第一次运行此命令时,首先从
ran=range(0,5)
,然后是
ran[:-1]==range(0,4)
,然后是
range(0,3)
,依此类推。它从不终止,因为它最终在
范围(0,0)
处触底,但这并不等于
[]


您可以通过在运行时将测试更改为
,来解决此问题!=范围(0,0):
(在Python 3.3+中),或者更简单地说,在运行时:
,因为
范围(0,0)
计算结果为
False

运行时使用
因为您指定的条件将始终为true,因为
ran
是一个范围而不是列表。

运行时使用
因为您指定的条件将始终为true,因为
ran
是一个范围而不是列表。

@JamesLee,…若要标记您的问题已解决,请单击答案左侧的复选框。@JamesLee无需担心。也就是说,就我个人而言,我会接受这个答案,这是第一个也是更全面的答案,而不是后一个只是重复前面答案和问题第一条评论中给出的内容的答案。@JamesLee是的,你会习惯这个社区,但通常是最完整的答案,或者,如果是平局,第一个最完整的答案是一个很好的答案,可以标记为已被接受。以最少的搜索量为未来有相同问题的人提供最有用的信息。如果你仍然可以改变它,你可以考虑这样做。如果不是,投票也很好@JamesLee,…若要标记您的问题已解决,请单击答案左侧的复选框。@JamesLee无需担心。也就是说,就我个人而言,我会接受这个答案,这是第一个也是更全面的答案,而不是后一个只是重复前面答案和问题第一条评论中给出的内容的答案。@JamesLee是的,你会习惯这个社区,但通常是最完整的答案,或者,如果是平局,第一个最完整的答案是一个很好的答案,可以标记为已被接受。以最少的搜索量为未来有相同问题的人提供最有用的信息。如果你仍然可以改变它,你可以考虑这样做。如果不是,投票也很好!如果我下面的回答有帮助,你会投赞成票吗?我是新来的,这对我很有帮助。谢谢如果我下面的回答有帮助,你会投赞成票吗?我是新来的,这对我很有帮助。谢谢