对于以下程序,在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/