Python 类构造函数-TypeError:';int';对象不可下标

Python 类构造函数-TypeError:';int';对象不可下标,python,pandas,oop,dataframe,genetic-algorithm,Python,Pandas,Oop,Dataframe,Genetic Algorithm,这个代码片段是一个更大的遗传算法的一部分。当我运行它时,我得到TypeError:“int”对象对于行agent.buy=agent.buy[I]+random.randint(0,以价格为单位长度)是不可订阅的 我知道你不能对一个普通的整数值进行索引,但是我很困惑,因为代理类中的self.buy被初始化为一个列表。我不太会使用面向对象的python,所以我确信我在美化一些简单的东西,我就是找不到它 class Agent: def __init__(self, length):

这个代码片段是一个更大的遗传算法的一部分。当我运行它时,我得到
TypeError:“int”对象对于行
agent.buy=agent.buy[I]+random.randint(0,以价格为单位长度)
是不可订阅的

我知道你不能对一个普通的整数值进行索引,但是我很困惑,因为代理类中的self.buy被初始化为一个列表。我不太会使用面向对象的python,所以我确信我在美化一些简单的东西,我就是找不到它

class Agent:

    def __init__(self, length):

        self.buy = [random.randint(0,length), random.randint(0,length)]
        self.fitness = -1

in_prices = None
in_prices_length = None
population = 20
generations = 100

def ga():

    agents = init_agents(population, in_prices_length)

    for generation in range(generations):

        print ('Generation: ' + str(generation))

        agents = fitness(agents)
        agents = selection(agents)
        agents = crossover(agents)
        agents = mutate(agents)

def init_agents(population, length):

    return [Agent(length) for _ in range(population)]

def mutate(agents):

    for agent in agents:

        for i in range(2):

            if random.uniform(0.0, 1.0) <= 0.1:

                agent.buy = agent.buy[i] + random.randint(0, in_prices_length)

    return agents

if __name__ == '__main__':


    raw = pd.read_csv('IBM.csv')
    in_prices = raw['close'].tolist()
    in_prices = list(reversed(in_prices))[0:300]
    in_prices_length = len(in_prices)
    ga()
类代理:
定义初始值(自身,长度):
self.buy=[random.randint(0,长度),random.randint(0,长度)]
self.fitness=-1
单位价格=无
单位价格单位长度=无
人口=20
世代=100
def ga():
代理=初始代理(总体,以价格为单位)
对于范围内的世代(世代):
打印('生成:'+str(生成))
代理=健身(代理)
代理=选择(代理)
代理=交叉(代理)
代理=变异(代理)
def初始代理(总体、长度):
返回[范围内(总体)的代理(长度)]
def突变(代理):
对于代理中的代理:
对于范围(2)中的i:

如果随机.uniform(0.0,1.0)但它不是一个列表始终,根据您的代码。迭代范围(0..1),并将第一次迭代中的
agent.buy
值重置为整数。在第二次迭代中,您再次尝试以列表的形式访问
buy
,但在上一次迭代中它被设置为整数

我怀疑你想做:

agent.buy[i] = agent.buy[i] + random.randint(0, in_prices_length)

但如果不知道算法,我不确定:)。

但根据您的代码,它不是一个列表始终。迭代范围(0..1),并将第一次迭代中的
agent.buy
值重置为整数。在第二次迭代中,您再次尝试以列表的形式访问
buy
,但在上一次迭代中它被设置为整数

我怀疑你想做:

agent.buy[i] = agent.buy[i] + random.randint(0, in_prices_length)
但是如果不知道算法,我不能确定:)。

在方法
mutate()
中,agent.buy被定义为两个整数的和

此外,它将取决于csv文件中分配的源数据 将值设置为“原始”

在方法
mutate()
中,agent.buy被定义为两个整数之和

此外,它将取决于csv文件中分配的源数据
将值设置为“原始”

agent.buy
可能被初始化为列表,但当您这样做时,您会给它分配一个数字:
agent.buy=agent.buy[i]+random.randint(0,单位为价格长度)
@MarkMeyer-Gotcha!该行最初用于将字符串添加到一起,因此对于列表来说,它的工作方式不同,这是有道理的。谢谢
agent.buy
可能被初始化为列表,但当您这样做时,您会给它分配一个数字:
agent.buy=agent.buy[i]+random.randint(0,单位为价格长度)
@MarkMeyer-Gotcha!该行最初用于将字符串添加到一起,因此对于列表来说,它的工作方式不同,这是有道理的。谢谢啊,好的,我明白了。因此,它应该是这样的
agent.buy=agent.buy[i,random.randint(0,in\u prices\u length)]
Hmm…我尝试了上面评论的更正,但仍然返回相同的错误。啊,好的,我明白了。因此,它可能应该是这样的
agent.buy=agent.buy[i,random.randint(0,in_prices\u length)]
Hmm…我尝试了上面评论的更正,但仍然返回相同的错误。好的,这完全有道理。我正在编写的教程将字符串与这行代码连接起来,当我将其更改为列表/整数时,显然效果不一样。谢谢你的帮助!更新:我尝试了你的建议,但它仍然返回相同的错误。好的,这完全有道理。我正在编写的教程将字符串与这行代码连接起来,当我将其更改为列表/整数时,显然效果不一样。谢谢你的帮助!更新:我尝试了你的建议,但仍然返回相同的错误。