如何为未排序的lis编写pop(item)方法

2024-09-30 22:20:14 发布

您现在位置:Python中文网/ 问答频道 /正文

为了准备考试,我正在实现一些基本的数据结构,遇到了以下问题。我想实现一个未排序的链表,并且已经实现了一个pop()方法,但是我不知道,无论是在语法上还是在概念上,如何使一个函数有时接受参数,有时不接受参数。我希望这有道理。在

def pop(self):
    current = self.head
    found = False
    endOfList = None

    while current != None and not found:
        if current.getNext() == None:
            found = True
            endOfList = current.getData()
            self.remove(endOfList)
            self.count = self.count - 1
        else:
            current = current.getNext()

    return endOfList

我想知道如何使语句unsortedList.pop(3)有效,3只是一个示例,unsortedList是类的新实例。在


Tags: 方法selfnone数据结构参数排序count语法
3条回答

使用具有默认值的参数的基本语法(和常见用例)如下所示:

def pop(self, index=None):
    if index is not None:
        #Do whatever your default behaviour should be

然后你只需要根据争论来确定你希望你的行为如何改变。我只是猜测参数应该指定应该从列表中弹出的元素的索引。在

如果是这种情况,您可以直接使用有效的默认值,而不是None,例如0

^{pr2}$

首先,向函数中添加一个具有默认值的参数:

def pop(self, item=None):

现在,在代码if item is None:中,可以执行“no param”操作;否则,使用item。你是想在逻辑的顶端切换,还是向下切换,这取决于你的逻辑。在本例中,item is None可能意味着“匹配第一项”,因此您可能需要一个检查item is None or current.data == item:的单个循环。在

有时,您希望对一个可以合法地为None的参数执行此操作,在这种情况下,您需要选择一个不同的sentinel。关于不同选择的利弊,这里有几个问题(其他地方也有博客文章)。但有一种方法:

^{pr2}$

除非有人使用LinkedList的私有_sentinel类成员作为列表项是有效的,否则这是有效的。(如果这个是有效的,例如,因为您要用这些东西构建一个调试器,那么您必须变得更加棘手。)

这方面的术语有点棘手。引用文件:

When one or more top-level parameters have the form parameter = expression, the function is said to have “default parameter values.”

要理解这一点:“Parameters”(或“formal Parameters”)是函数定义要接受的东西;“arguments”是在调用表达式中传递给函数的东西;“parameter values”(或“actual Parameters”,但这只会让事情更混乱)是函数体接收的值。所以,在技术上说“默认参数”或“带默认参数的参数”都是不正确的,但两者都很常见,因为即使是专家也觉得这很令人困惑。(如果您很好奇,或者只是还不困惑,请参阅参考文档中的function definitions和{a2}以获取完整的详细信息。)

你的考试是专门用Python的吗?如果不支持,您可能需要研究一下function overloading.Python不支持此功能,但其他许多语言都支持,这是解决此类问题的一种非常常见的方法。在

在Python中,使用带有默认值的参数可以获得很多好处(正如michaelmauderer的示例所指出的)。在

相关问题 更多 >