我正在嘗試創建一個由另一個串列組成的串列:[[1,2,3,4] [5,6,7,8]] 這里的事情是當我附加 np.append()一個串列到另一個這是嵌套而不是維護一個彼此分開的串列,如下所示:[[1,2,3,4,5,6,7,8]] 這是我的代碼:
class poblacion:
def generar(self):
poblacion_p = np.random.randint(0,4,(10,10))
print (poblacion_p)
self.individuos(poblacion_p)
def individuos(self, poblacion_p):
individuo1=poblacion_p[0]
individuo2=poblacion_p[1]
individuo3=poblacion_p[2]
individuo4=poblacion_p[3]
individuo5=poblacion_p[4]
individuo6=poblacion_p[5]
individuo7=poblacion_p[6]
individuo8=poblacion_p[7]
individuo9=poblacion_p[8]
individuo10=poblacion_p[9]
aptitudes = [1,3,5,7,9,11,12,14,19,20]
nueva_g=[]
aptitud = random.choices(aptitudes, weights=(5,15,25,35,45,63,65,67,75,80), k = 10)
for c in aptitud:
if (c == 20):
nueva_g = np.append(nueva_g, individuo1)
elif (c == 19):
nueva_g = np.append(nueva_g, individuo8)
elif (c == 14):
nueva_g = np.append(nueva_g, individuo2)
elif (c == 12):
nueva_g = np.append(nueva_g, individuo6)
elif (c == 11):
nueva_g = np.append(nueva_g, individuo3)
elif (c == 9):
nueva_g = np.append(nueva_g, individuo9)
elif (c == 7):
nueva_g = np.append(nueva_g, individuo4)
elif (c == 5):
nueva_g = np.append(nueva_g, individuo7)
elif (c == 3):
nueva_g = np.append(nueva_g, individuo5)
elif (c == 1):
nueva_g = np.append(nueva_g, individuo10)
print(aptitud)
print(nueva_g)
當我運行代碼時,poblacion_p 的串列是我想要的形式:
[[3 2 1 1 0 0 1 3 0 0],
[2 2 2 0 0 2 0 1 1 3],
[3 3 0 0 1 3 3 1 1 3],
[3 2 3 3 3 0 1 1 3 0],
[3 1 2 0 3 2 2 0 0 1],
[2 2 3 3 3 2 1 1 0 0],
[2 3 2 0 3 1 1 3 2 0],
[1 3 3 3 0 2 0 1 2 2],
[3 1 1 2 3 1 3 3 3 2],
[3 0 3 1 3 3 1 1 0 0]]
但是,當我嘗試在新串列中附加隨機選擇程式的行時,會發生這種情況:
[3. 2. 1. 1. 0. 0. 1. 3. 0. 0. 2. 2. 3. 3. 3. 2. 1. 1. 0. 0. 2. 2. 2. 0. 0. 2. 0. 1. 1. 3. 3. 3. 0. 0. 1. 3. 3. 1. 1. 3. 2. 3. 2. 0. 3. 1. 1. 3. 2. 0. 3. 1. 1. 2. 3. 1. 3. 3. 3. 2. 2. 2. 3. 3. 3. 2. 1. 1. 0. 0. 2. 2. 2. 0. 0. 2. 0. 1. 1. 3. 2. 2. 3. 3. 3. 2. 1. 1. 0. 0. 1. 3. 3. 3. 0. 2. 0. 1. 2. 2.]
有誰知道如何將串列彼此分開?
uj5u.com熱心網友回復:
您應該append()像這樣使用串列物件的方法:
for c in aptitud:
if (c == 20):
nueva_g.append(individuo1)
elif (c == 19):
nueva_g.append(individuo8)
elif (c == 14):
nueva_g.append(individuo2)
編輯
根據建議,如果您想重新撰寫代碼,您可以使用字典作為此類問題的映射。像這樣的東西會很好用。
MAP = {20: 0,
19: 7,
14: 1}
for c in aptid:
nueva_g.append(poblacion_p[MAP[c]])
這僅適用于我上面給出的幾個例子,我也可能會重組,以便資料處于更合乎邏輯的順序,但也許有一個原因,因為它在 for 回圈中運行。這是未經測驗的,但總體思路是合理的。
您還可以將字典方法包裝在 switch 函式中。或者從 Python 3.10 開始,您可以使用內置的 switch 陳述句。
https://docs.python.org/3/whatsnew/3.10.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/372116.html
