Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-字典列表-Typeerror:';int';对象不可下标_Python_List_Dictionary_Typeerror - Fatal编程技术网

Python-字典列表-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

下一段代码创建一个字典列表。字典的键仅为整数,由随机函数生成,相应的值由ord函数生成。当我生成小的列表(大约10、20或30个)时,它工作得非常好,但是当我创建大的列表(大约100个元素)时,我总是会遇到同样的错误,我需要这样做。 加上 如果对[0]==密钥: TypeError:“int”对象不可下标

代码如下:

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解决了问题没有问题,很乐意帮助!