2

该函数搜索一个值的索引,如果再次调用它,则返回该值的下一个索引。这是我尝试过的,我得到的错误是我的列表没有被覆盖,每次调用后我都会得到相同的结果。注意:我这里没有包含链表类 如果有人知道更好的方法来制作这个功能,请建议

class Node:
    def __init__(self,value):
        self.value = value
        self.next = None
        self.previous = None

class LinkedList:
    def __init__(self):
        self.head = None
        self.tail = None

class DynamicSharpSearch(LinkedList):

    def __init__(self, data):
        super().__init__()
        self.data = data
        self.count = 0

        self.lim = 0    # using in search function

        for i in self.data:
            self.InsertatEnd(i)
            self.count += 1

        self.demlst = [-1 for i in range(self.count)]   # using in Search function only
        self.seclist = self.demlst


    def Search(self,n):
        x = self.head
        #demlst = [-1 for i in range(self.count)]
        y = 0
        tst = -1 # checks value if not in our data
        ##############################

        for i in range(self.count):

            if n == x.value:
                # demlst.append(i)
                self.demlst[y] = i
                tst = 0
            x = x.next
            y += 1
        ##############################
        if tst == -1:
            return -1
        else:
            pass
        """Demlist containes "indexes" """
        for i in range(self.count): 

            if self.seclist[i] >= 0:
                #y = self.seclist[i]

                self.seclist[i] = -1
                self.lim = i
                return i

obj = DynamicSharpSearch([53,4,52,7,5,4,5,5,5,6,4,2,4,5,459]) # c = 6
print(obj.Search(5))
print(obj.Search(5))
print(obj.Search(5))

我得到什么输出:

4
4
4
4

1 回答 1

0

我会使用字典来跟踪每个值的最后返回索引。调用该Search方法时,它会查看是否在之前查找过该值:start_index = self.last_returned.get(n, 0)。如果start_index大于 0,则在开始搜索之前快进到该索引。找到所需内容后,更新字典:self.last_returned[n] = returned_index + 1. 为什么是“+1”?因为否则你会得到你现在得到的东西,同样的索引会一遍又一遍地返回。您需要在返回的最后一个索引之后开始搜索。(但是,您需要确保没有存储会导致 IndexError 的值。)

于 2019-11-28T19:38:14.013 回答