【问题标题】:list.extend() randomly failing to add results during a for looplist.extend() 在 for 循环期间随机添加结果失败
【发布时间】:2020-09-08 23:04:21
【问题描述】:

我一直在研究一个程序,该程序反复选择列表中最大的项目并将其复制到整个列表中,每次都添加一些变化。感觉应该很容易,但是每次都有一个元素最终是空白的。这是代码,重要部分分开:

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)

当我运行 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.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

完成的元素数量每次都在变化,这让我发疯。感谢您提供任何帮助,如果我应该提供更多信息,请告诉我。

【问题讨论】:

标签: python-3.x list for-loop random


【解决方案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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多