对于以下程序,在addEntry(self,dictKey,dictVal)函数中,我不理解为什么以下代码行不会生成索引错误:

if hashBucket[i][0] == dictKey


self.buckets最初是一个空列表:
self.buckets = [[],[]...[]]
第一次执行addEntry时,hashBucket只是一个空列表,因此我希望hashBucket[i][0]会生成索引错误,但是该程序实际上可以工作,为什么?非常感谢您的帮助。

这是程序

class intDict(object):
    """A dictionary with integer keys"""

    def __init__(self, numBuckets):
        """Create an empty dictionary"""
        self.buckets = []
        self.numBuckets = numBuckets
        for i in range(numBuckets):
            self.buckets.append([])

    def addEntry(self, dictKey, dictVal):
        """Assumes dictKey an int. Adds an entry"""
        hashBucket = self.buckets[dictKey%self.numBuckets]
        for i in range(len(hashBucket)):
            if hashBucket[i][0] == dictKey:
                hashBucket[i] = (dictKey, dictVal)
                return
        hashBucket.append((dictKey, dictVal))

    def getValue(self, dictKey):
        """Assumes dictKey an int. Returns entry associated with the key dictKey"""
        hashBucket = self.buckets[dictKey%self.numBumBuckets]
        for e in hashBucket:
            if e[0] == dictKay:
                return e[1]
        return None

    def __str__(self):
        result = '{'
        for b in self.buckets:
            for e in b:
                result = result + str(e[0]) + ":" + str(e[1]) + ','
        return result[:-1] + '}' # result[:-1] omits the last coma

最佳答案

由于hashBucket首先是一个空列表,因此for i in range(len(hashBucket)):本质上是for i in range(0):,这意味着它在第一次调用if hashBucket[i][0] == dictKey时永远不会到达条件addEntry

关于python - 在python中的空列表上使用索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39671669/

10-10 11:38