2017-06-16 50 views
0

我想這對於「for-loop」來說是一個非常簡單的任務,但我無法理解它。基本上我想循環執行此:如何將一些字符串添加爲列表中的項目?

pop1 = (
    [fitness[0][1]] * fitness[0][0] + 
    [fitness[1][1]] * fitness[1][0] + 
    [fitness[2][1]] * fitness[2][0] + 
    [fitness[3][1]] * fitness[3][0] 
) 

但是「N」次。我已經得到這個目前爲止,但不能得到補充。Fitness [i] [1]是一個字符串,而fitness [i] [0]是一個int。

pop1 = [] 

for i in range(0,popnb): 
    x = fitness[i][1] 
    y = fitness[i][0] 
    z = [x]*y 
    pop1.append(z) 

我想答案並不遙遠,但所有的幫助表示讚賞!謝謝!

回答

2

您正在構建一個長列表;要延長pop1列表,而不是追加:

pop1 = [] 

for i in range(popnb): 
    x = fitness[i][1] 
    y = fitness[i][0] 
    z = [x] * y 
    pop1.extend(z) 

你可以使用​​了。

如果popnbfitness長度超過fitness直接剛剛循環:

pop1 = [] 

for f in fitness: 
    pop1 += [f[1]] * f[0] 

你可以使用itertools功能做重複和鏈接:

from itertools import repeat, chain 

pop1 = list(chain.from_iterable(repeat(f[1], f[0]) for f in fitness)) 
+0

哈哈非常感謝您的快速幫助!有效!現在我更瞭解一些列表。謝謝! –

0

假設內的健身每個列表有2個值,您可以使用列表comprahension:
pop1 = [y for x, y in fitness for _ in range(x)]
例如:

fitness = [[8, 10], [8, 3], [5, 8], [5, 1], [2, 10]] 
pop1 = [y for x, y in fitness for _ in range(x)] 
#pop1 is equal to: 
[10, 10, 10, 10, 10, 10, 10, 10, 
3, 3, 3, 3, 3, 3, 3, 3, 
8, 8, 8, 8, 8, 
1, 1, 1, 1, 1, 
10, 10] 
相關問題