Python 3.x list.extend()在for循环期间随机添加结果失败

Python 3.x list.extend()在for循环期间随机添加结果失败,python-3.x,list,for-loop,random,Python 3.x,List,For Loop,Random,我在一个程序上绞尽脑汁,该程序反复选择列表中最大的项目,并将其复制到整个列表中,每次都会增加一些变化。感觉应该很简单,但每次都有一个元素是空白的。代码如下,重要部分分开: import random as r alice = [] bob = [] cathy= [] davos = [] ezekiel = [] francesco = [] graham = [] genVar = 0.25 classroom = [alice, bob, cathy, davos, ezekiel, fr

我在一个程序上绞尽脑汁,该程序反复选择列表中最大的项目,并将其复制到整个列表中,每次都会增加一些变化。感觉应该很简单,但每次都有一个元素是空白的。代码如下,重要部分分开:

import random as r
alice = []
bob = []
cathy= []
davos = []
ezekiel = []
francesco = []
graham = []
genVar = 0.25
classroom = [alice, bob, cathy, davos, ezekiel, francesco, graham]
for i in classroom:
    skill = r.random()
    i.append(skill)
    i.append(1-skill)
a = 0

while a < 10:
    best = max(classroom, key=lambda x:x[0]*x[1])
    for i in classroom:
        i.clear()
        i.extend(best)
        print(best)
        i[0] += r.uniform(-1*genVar, genVar)
        i[1] += r.uniform(-1*genVar, genVar)

    a+=1
    print(best)
将随机导入为r
爱丽丝=[]
鲍勃=[]
凯西=[]
达沃斯=[]
以西结=[]
弗朗西斯科=[]
格雷厄姆=[]
genVar=0.25
教室=[爱丽丝、鲍勃、凯西、达沃斯、以西结、弗朗西斯科、格雷厄姆]
对于我来说,在课堂上:
skill=r.random()
i、 附加(技能)
i、 附加(1-技能)
a=0
而a<10:
最佳=最大(教室,钥匙=λx:x[0]*x[1])
对于我来说,在课堂上:
i、 清除()
i、 扩展(最佳)
打印(最佳)
i[0]+=r.uniform(-1*genVar,genVar)
i[1]+=r.uniform(-1*genVar,genVar)
a+=1
打印(最佳)
当我运行cde时,我得到的错误如下:

[0.5598973199094259, 0.44010268009057407]
[0.5598973199094259, 0.44010268009057407]
[0.5598973199094259, 0.44010268009057407]
[]
Traceback (most recent call last):
  File "C:/Users/Leafy/AppData/Local/Programs/Python/Python36-32/multiplierlearner.py", line 24, in <module>
    i[0] += r.uniform(-1*genVar, genVar)
IndexError: list index out of range
[0.5598973199094259,0.44010268009057407]
[0.5598973199094259, 0.44010268009057407]
[0.5598973199094259, 0.44010268009057407]
[]
回溯(最近一次呼叫最后一次):
文件“C:/Users/Leafy/AppData/Local/Programs/Python/Python36-32/multiplierlearner.py”,第24行,在
i[0]+=r.uniform(-1*genVar,genVar)
索引器:列表索引超出范围
奇怪的是,当我第二次运行代码时,我得到的结果是:

[0.6459806429424123, 0.3540193570575877]
[]
Traceback (most recent call last):
  File "C:/Users/Leafy/AppData/Local/Programs/Python/Python36-32/multiplierlearner.py", line 23, in <module>
    i[0] += r.uniform(-1*genVar, genVar)
IndexError: list index out of range
[0.6459806429424123,0.35401935705877]
[]
回溯(最近一次呼叫最后一次):
文件“C:/Users/Leafy/AppData/Local/Programs/Python/Python36-32/multiplierlearner.py”,第23行,在
i[0]+=r.uniform(-1*genVar,genVar)
索引器:列表索引超出范围

完成元素的数量每次都在变化,这让我发疯。非常感谢您的帮助,如果还有更多信息需要提供,请告诉我。

需要进行简单修改,如下所示:

for i in classroom:
        if i != best:
            i.clear()
            i.extend(best)
我试过你的代码,为了更好地理解

import random as r
alice = []
bob = []
cathy= []
davos = []
ezekiel = []
francesco = []
graham = []
genVar = 0.25
classroom = [alice, bob, cathy, davos, ezekiel, francesco, graham]
for i in classroom:
    skill = r.randint(0,100)
    i.append(skill)
    i.append(skill-1)
a = 0

while a < 10:
    print("Iteration number",a)
    print()
    best = max(classroom, key=lambda x:x[1])
    print("best",best)

    print("max:",max(classroom, key=lambda x:x[1]))

    print("clasroom",classroom)
    for i in classroom:
        if i != best:
            i.clear()
            i.extend(best)
        print("best in iteration",best)
        i[0] += r.uniform(-1*genVar, genVar)
        i[1] += r.uniform(-1*genVar, genVar)

    a+=1
    print()
    print("best after iteration",best)
    print()
将随机导入为r
爱丽丝=[]
鲍勃=[]
凯西=[]
达沃斯=[]
以西结=[]
弗朗西斯科=[]
格雷厄姆=[]
genVar=0.25
教室=[爱丽丝、鲍勃、凯西、达沃斯、以西结、弗朗西斯科、格雷厄姆]
对于我来说,在课堂上:
skill=r.randint(0100)
i、 附加(技能)
i、 附加(技能-1)
a=0
而a<10:
打印(“迭代编号”,a)
打印()
最佳=最大(教室,钥匙=λx:x[1])
打印(“最佳”,最佳)
打印(“最大:”,最大(教室,钥匙=λx:x[1]))
打印(“教室”,教室)
对于我来说,在课堂上:
如果我最佳:
i、 清除()
i、 扩展(最佳)
打印(“迭代中最佳”,最佳)
i[0]+=r.uniform(-1*genVar,genVar)
i[1]+=r.uniform(-1*genVar,genVar)
a+=1
打印()
打印(“迭代后最佳”,最佳)
打印()

需要进行简单修改,如下所示:

for i in classroom:
        if i != best:
            i.clear()
            i.extend(best)
我试过你的代码,为了更好地理解

import random as r
alice = []
bob = []
cathy= []
davos = []
ezekiel = []
francesco = []
graham = []
genVar = 0.25
classroom = [alice, bob, cathy, davos, ezekiel, francesco, graham]
for i in classroom:
    skill = r.randint(0,100)
    i.append(skill)
    i.append(skill-1)
a = 0

while a < 10:
    print("Iteration number",a)
    print()
    best = max(classroom, key=lambda x:x[1])
    print("best",best)

    print("max:",max(classroom, key=lambda x:x[1]))

    print("clasroom",classroom)
    for i in classroom:
        if i != best:
            i.clear()
            i.extend(best)
        print("best in iteration",best)
        i[0] += r.uniform(-1*genVar, genVar)
        i[1] += r.uniform(-1*genVar, genVar)

    a+=1
    print()
    print("best after iteration",best)
    print()
将随机导入为r
爱丽丝=[]
鲍勃=[]
凯西=[]
达沃斯=[]
以西结=[]
弗朗西斯科=[]
格雷厄姆=[]
genVar=0.25
教室=[爱丽丝、鲍勃、凯西、达沃斯、以西结、弗朗西斯科、格雷厄姆]
对于我来说,在课堂上:
skill=r.randint(0100)
i、 附加(技能)
i、 附加(技能-1)
a=0
而a<10:
打印(“迭代编号”,a)
打印()
最佳=最大(教室,钥匙=λx:x[1])
打印(“最佳”,最佳)
打印(“最大:”,最大(教室,钥匙=λx:x[1]))
打印(“教室”,教室)
对于我来说,在课堂上:
如果我最佳:
i、 清除()
i、 扩展(最佳)
打印(“迭代中最佳”,最佳)
i[0]+=r.uniform(-1*genVar,genVar)
i[1]+=r.uniform(-1*genVar,genVar)
a+=1
打印()
打印(“迭代后最佳”,最佳)
打印()

因为
i
best
都在
教室里,所以可能发生
i是best
这意味着
i.clear()
也会清除
best
。我知道我怎么可能在教室里,但best不是教室外的单独变量吗?这回答了你的问题吗?可能也很有趣:既然
i
best
都在
教室
,那么
i是best
,这意味着
i.clear()
也会清除
best
。我知道我怎么会在教室里了,但贝斯特不是在课堂之外有自己的独立变量吗?这能回答你的问题吗?可能也有兴趣:和