Python-字典列表-Typeerror:';int';对象不可下标
下一段代码创建一个字典列表。字典的键仅为整数,由随机函数生成,相应的值由ord函数生成。当我生成小的列表(大约10、20或30个)时,它工作得非常好,但是当我创建大的列表(大约100个元素)时,我总是会遇到同样的错误,我需要这样做。 加上 如果对[0]==密钥: TypeError:“int”对象不可下标 代码如下:Python-字典列表-Typeerror:';int';对象不可下标,python,list,dictionary,typeerror,Python,List,Dictionary,Typeerror,下一段代码创建一个字典列表。字典的键仅为整数,由随机函数生成,相应的值由ord函数生成。当我生成小的列表(大约10、20或30个)时,它工作得非常好,但是当我创建大的列表(大约100个元素)时,我总是会遇到同样的错误,我需要这样做。 加上 如果对[0]==密钥: TypeError:“int”对象不可下标 代码如下: import random import math def makeArray(Size): Arr = [None] * Size return(Arr) de
import random
import math
def makeArray(Size):
Arr = [None] * Size
return(Arr)
def getNumericKey(key):
hash = 0
for char in str(key):
hash += ord(char)
return(hash)
def H(keyN,m):
return(keyN % m)
def search(key, Size, table):
key_hash=H(getNumericKey(key),Size)
if table[key_hash] is not None:
for pair in table[key_hash]:
if pair[0]==key:
return(pair[1])
else:
for j in range(Size):
keyh=(key_hash+j)%Size
if keyh==(Size-1):
break
for pair1 in table[keyh]:
if pair1[0]==key:
return(pair1[1])
return(None)
def add(key, value, table, Size):
key_hash = H(getNumericKey(key), Size)
pairkeyvalue = [key, value]
if table[key_hash] is None:
table[key_hash] = list([pairkeyvalue])
return(True)
else:
for pair in table[key_hash]:
if pair[0] == key:
pair[1] = value
return(True)
for j in range(Size):
keyh = (key_hash + j) % Size
if keyh == (Size - 1):
print('table llena', key_hash)
break
else:
if table[keyh] is None:
table[keyh] = list(pairkeyvalue)
return(True)
a=int(input("Size of table: "))
table = makeArray(a)
lst = [0] * math.floor(a/2)
for i in range(math.floor(a/2)):
lst [i] = random.randint(1,100)
print(lst)
for n in lst:
add(n, getNumericKey(n), table, len(table))
print(table)
在
add
中,您希望将行table[keyh]=list(pairkeyvalue)
更改为table[keyh]=list([pairkeyvalue])
或table[keyh]=[pairkeyvalue]
pairkeyvalue
已经是列表,因此list(pairkeyvalue)
什么都不做,但是您希望table[keyh]
成为包含列表的列表
def add(key, value, table, size):
key_hash = H(getNumericKey(key), size)
pairkeyvalue = [key, value]
if table[key_hash] is None:
table[key_hash] = [pairkeyvalue]
return True
else:
for pair in table[key_hash]:
if pair[0] == key:
pair[1] = value
return True
for j in range(size):
keyh = (key_hash + j) % size
if keyh == (size - 1):
print('table llena', key_hash)
break
else:
if table[keyh] is None:
table[keyh] = [pairkeyvalue]
return True
请发布回溯将int转换为stringlst=[0]*math.floor(a/2)--这行代码也是错误的,不能将list与float相乘实际上,floor函数从操作中获取最接近的整数。如果a=100楼层需要50如果a=5楼层需要2非常感谢Jeremy McGibbon解决了问题没有问题,很乐意帮助!