首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python列表顺序

Python列表顺序
EN

Stack Overflow用户
提问于 2016-02-12 09:28:40
回答 5查看 1.8K关注 0票数 12

在我编写的小脚本中,.append()函数将输入的项添加到列表的开头,而不是列表的末尾。(您可以清楚地理解,Python是非常新的,所以请轻松地对待我)

list.append(x) 将一项添加到列表的末尾;相当于a[len(a):] = [x]

这就是https://docs.python.org/2/tutorial/datastructures.html中所说的。

您可以在下面看到我的代码:

代码语言:javascript
复制
user_input = []
def getting_text(entered_text):
    if entered_text == "done":
        print "entering the texts are done!"
    else:
        getting_text(raw_input("Enter the text or write done to finish entering "))
        user_input.append(entered_text)

getting_text(raw_input("Enter the first text "))
print user_input

我在这里是不是误解了什么,因为打印函数打印的是c,b,a而不是a,b,c (输入的顺序是a,b,c)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-02-12 09:34:26

好吧,这就是发生的事。

当您的文本不是"done"时,您已经编写了它的程序,以便立即再次调用函数(即递归调用它)。注意如何在执行getting_text(raw_input("Enter the text or write done to finish entering "))行之后将其设置为将项附加到列表中。

因此,基本上,当您添加变量时,它将在完成递归函数之后添加所有变量。

因此,当您键入a时,它将再次调用该函数(尚未向列表输入任何内容)。然后键入b,然后输入c。键入done时,递归位就完成了。现在,它做了user_input.append(...。然而,这个顺序被颠倒了,因为它首先处理c,因为这是最新的事情。

当您在函数中打印列表时,可以显示这一点:

代码语言:javascript
复制
>>> def getting_text(entered_text):
...     print user_input
...     if entered_text == "done":
...         print "entering the texts are done!"
...     else:
...             getting_text(raw_input("Enter the text or write done to finish entering "))
...             user_input.append(entered_text)
... 
>>> 
>>> getting_text(raw_input("Enter the first text "))
Enter the first text a
[]
Enter the text or write done to finish entering b
[]
Enter the text or write done to finish entering c
[]
Enter the text or write done to finish entering done
[]
entering the texts are done!
>>> user_input
['c', 'b', 'a']

注意打印语句第2行。

那你怎么解决这个问题?简单:在递归调用之前追加到列表中。

代码语言:javascript
复制
>>> user_input = []
>>> def getting_text(entered_text):
...     if entered_text == "done":
...         print "entering the texts are done!"
...     else:
...             user_input.append(entered_text)
...             getting_text(raw_input("Enter the text or write done to finish entering "))
... 
>>> user_input = []
>>> getting_text(raw_input("Enter the first text "))
Enter the first text a
Enter the text or write done to finish entering b
Enter the text or write done to finish entering c
Enter the text or write done to finish entering done
entering the texts are done!
>>> user_input
['a', 'b', 'c']
票数 28
EN

Stack Overflow用户

发布于 2016-02-12 09:35:34

您的脚本中有递归。脚本在添加到列表之前先进入getting_text。因此,追加是在递归函数最终返回时完成的。这样,您就可以在返回路径上向下遍历堆栈,执行append()调用,等待以反向顺序执行。

也许像这样更容易站起来:

代码语言:javascript
复制
getting_text()
    getting_text()
        getting_text()
        append()
    append()
append()

如果您希望在“正确”命令中得到结果,请在append调用之前将getting_text()上线移动。

票数 5
EN

Stack Overflow用户

发布于 2016-02-12 09:34:47

递归函数getting_text在将entered_text添加到列表之前调用自己。因此,内部调用的效果先于外部调用的效果。

如果你到处交换

代码语言:javascript
复制
getting_text(raw_input("Enter the text or write done to finish entering "))
user_input.append(entered_text)

代码语言:javascript
复制
user_input.append(entered_text)
getting_text(raw_input("Enter the text or write done to finish entering "))

然后,user_input的内容将是相反的顺序。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35359009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档