如何在列表中添加多个字符串作为项目?

时间:2017-06-16 18:23:33

标签: python python-2.7 for-loop

我想这对于“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)

我想答案并不遥远,但所有的帮助都表示赞赏!谢谢!

2 个答案:

答案 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]