Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python [1:]在递归函数中做什么_Python_List - Fatal编程技术网

Python [1:]在递归函数中做什么

Python [1:]在递归函数中做什么,python,list,Python,List,我在代码中看到了这一点,我不明白它是如何工作的。它把砍下来的东西保存在什么地方了吗 下面是一个示例(来自askpython): 它似乎在每次递归时都会切掉第一个字符,直到几乎结束时,它会对所有字母同时重复“+x[0]”部分 它是如何工作的?由于x[1:://code>只获取列表的第一项,而x[0]只获取第一项,因此我们可以假设此递归的工作方式是,它对x[1://code>的每个值重复执行此操作,随着每次迭代,长度将减少1,因为它用切片列表调用自己 因此,最终结果是字符串被反转 如果我们使用“ST

我在代码中看到了这一点,我不明白它是如何工作的。它把砍下来的东西保存在什么地方了吗

下面是一个示例(来自askpython):

它似乎在每次递归时都会切掉第一个字符,直到几乎结束时,它会对所有字母同时重复“+x[0]”部分


它是如何工作的?

由于
x[1:://code>只获取列表的第一项,而
x[0]
只获取第一项,因此我们可以假设此递归的工作方式是,它对
x[1://code>的每个值重复执行此操作,随着每次迭代,长度将减少1,因为它用切片列表调用自己

因此,最终结果是字符串被反转

如果我们使用
“STRING”
调用函数,则以下步骤:

rev_string(x="STRING")
rev_string(x[1:]) + x[0] # equivalent to rev_string("TRING") + "S"
rev_string("RING") + "T"
rev_string("ING") + "R"
rev_string("NG") + "I"
rev_string("G") + "N"

# the final call to rev_string results in:
return "G"

# meaning that the result of the previous call is:
return "G" + "N"

# meaning the previous call results in:
return "GN" + "I"

# and then:
return "GNI" + "R"

# and then:
return "GNIR" + "T"

# and then:
return "GNIRT" + "S"

# and then:
return "GNIRTS"

它基本上使用由除第一个字符外的所有字符组成的新字符串调用函数。
x[1://code>是一个切片操作,它返回从索引1(第二个元素)到结尾的所有元素

请注意,在
rev_string(x[1:])+x[0]
中,这样的第一个字符被附加在末尾。当字符串每次调用减少一个字符(直到变为空)时,它将反转字符串(如方法名称所示)

下面是调用
rev\u string(“Hello”)
的示例。首先,顺序如下:

x = "Hello" -> x[1:] = "ello", x[0] = "H"
x = "ello" -> x[1:] = "llo", x[0] = "e"
x = "llo" -> x[1:] = "lo", x[0] = "l"
x = "lo" -> x[1:] = "o", x[0] = "l"
x = "o" -> x[1:] = "", x[0] = "o"
然后回滚:

"" + "o" = "o"
"o" + "l" = "ol"
"ol" + "l" = "oll"
"oll" + "e" = "olle"
"olle" + "H" = "olleH"

哦,这是有道理的。可以我完全看错了。谢谢。@user14658057您应该投票给这些正确回答您问题的人。谢谢!:)我很感激你的回答。你错过了“T”:D@Jonathan固定的。
"" + "o" = "o"
"o" + "l" = "ol"
"ol" + "l" = "oll"
"oll" + "e" = "olle"
"olle" + "H" = "olleH"