我想这对于“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”次。到目前为止我已经达到了这个目的但是无法加入.Adinness [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)
我想答案并不遥远,但所有的帮助都表示赞赏!谢谢!
答案 0 :(得分:2)
你正在建立一个长长的清单;你想扩展 pop1
列表而不是追加:
pop1 = []
for i in range(popnb):
x = fitness[i][1]
y = fitness[i][0]
z = [x] * y
pop1.extend(z)
您也可以使用pop1 += z
。
如果popnb
的长度为fitness
,则只需直接循环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))
答案 1 :(得分:0)
假设健身中的每个列表都有2个值,您可以使用list 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]