列表中随机生成的整数是相同的
Randomly generated integers in a list are the same
我的脚本遇到了这个问题。我想初始化一个遗传算法,在这种情况下,我想给行中的每个第一个元素一个 200 到 400 之间的随机值。
import random
def InitiatePopulation(Population,AmountofSettings):
Generation= [None]*Population
sett = []
for k in range(0,Population):
for j in range(0,AmountofSettings):
sett.append(300)
Generation[k] = sett
for _k in range(0, len(Generation)):
Generation[_k][0] = random.randint(200,400)
for _p in range(1, len(Generation[_k]),3):
Generation[_k][_p] = 20
return Generation
每当我 运行 代码时,所有第一个值都是相同的值。我尝试调整种子值,但这不起作用。因为我过去在使用 for 循环时遇到过问题,所以问题可能就在那里。我知道代码不一定有效,我只是想在将第一个设置变量调整为随机整数之前创建人口。
这是当前输出:
[[221, 20, 300, 300, 20, 300, 300, 20, 300, 300, 20, 300],
[221, 20, 300, 300, 20, 300, 300, 20, 300, 300, 20, 300]]
除了 221 个值彼此不同之外,预期的输出是相同的。
我怎样才能做到这一点?
看起来问题是您将 Generation
的所有元素设置为同一个列表(即引用内存中的相同位置)。
您需要在每次迭代开始时将列表重新分配给一个新的空列表:
for k in range(0,Population):
sett = []
for j in range(0,AmountofSettings):
sett.append(300)
Generation[k] = sett
我知道有人回答了,我只是提供一个稍微优化的解决方案,如果你需要的话。我删除了 2 个 for
循环,现在它是一个外部列表理解的循环,因为它只需要 运行 一次。
import random
def InitiatePopulation(Population, AmountofSettings):
Generation = []
sett = [20 if (x-1) % 3 == 0 else 300 for x in range(AmountofSettings)]
for _ in range(Population):
_sett = sett.copy()
_sett[0] = random.randint(200,400)
Generation.append(_sett)
return Generation
print(InitiatePopulation(2, 12))
我的脚本遇到了这个问题。我想初始化一个遗传算法,在这种情况下,我想给行中的每个第一个元素一个 200 到 400 之间的随机值。
import random
def InitiatePopulation(Population,AmountofSettings):
Generation= [None]*Population
sett = []
for k in range(0,Population):
for j in range(0,AmountofSettings):
sett.append(300)
Generation[k] = sett
for _k in range(0, len(Generation)):
Generation[_k][0] = random.randint(200,400)
for _p in range(1, len(Generation[_k]),3):
Generation[_k][_p] = 20
return Generation
每当我 运行 代码时,所有第一个值都是相同的值。我尝试调整种子值,但这不起作用。因为我过去在使用 for 循环时遇到过问题,所以问题可能就在那里。我知道代码不一定有效,我只是想在将第一个设置变量调整为随机整数之前创建人口。
这是当前输出:
[[221, 20, 300, 300, 20, 300, 300, 20, 300, 300, 20, 300],
[221, 20, 300, 300, 20, 300, 300, 20, 300, 300, 20, 300]]
除了 221 个值彼此不同之外,预期的输出是相同的。 我怎样才能做到这一点?
看起来问题是您将 Generation
的所有元素设置为同一个列表(即引用内存中的相同位置)。
您需要在每次迭代开始时将列表重新分配给一个新的空列表:
for k in range(0,Population):
sett = []
for j in range(0,AmountofSettings):
sett.append(300)
Generation[k] = sett
我知道有人回答了,我只是提供一个稍微优化的解决方案,如果你需要的话。我删除了 2 个 for
循环,现在它是一个外部列表理解的循环,因为它只需要 运行 一次。
import random
def InitiatePopulation(Population, AmountofSettings):
Generation = []
sett = [20 if (x-1) % 3 == 0 else 300 for x in range(AmountofSettings)]
for _ in range(Population):
_sett = sett.copy()
_sett[0] = random.randint(200,400)
Generation.append(_sett)
return Generation
print(InitiatePopulation(2, 12))