将列表整理到嵌套列表中

时间:2018-11-14 21:21:23

标签: python

我试图弄清楚如何将列表中的元素添加到将它们放入嵌套列表中的模式中。

例如:

members = [1, 2, 3, 4, 5, 6, 7, 8, 9]
no_of_teams = int(input('no. of teams? '))
teams = [ [ ] for _ in range(no_of_teams)]

这样我的输出最终看起来像这样:

没有团队? 2

teams = [ [1, 3, 5, 7, 9], [2, 4, 6, 8]]

如果用户输入3,则它将如下所示:

teams = [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

对于7看起来像

teams = [ [1, 8], [2, 9], [3], [4], [5], [6], [7] ]

4 个答案:

答案 0 :(得分:3)

一种好方法是使用切片:

number = int(input(...))
members = list(range(1, 10))
chunks = len(members) // number
teams = [members[i*chunks:i*chunks+number]
         for i in range(number)]

您也可以改用步长:

teams = [members[i::number]
         for i in range(number)]

这将产生您想要的输出:

  • 在每次迭代中,我们从列表中的下一项开始切片
  • 切片以n步长上升

因此,如果n为3,则第1次迭代将给出包含索引0、3、6、9 .....的切片,因为步长为3 第二次迭代给出索引1、4、7 ... 第三次迭代给出索引2、5、8 ... 由于n也对此进行了规定,因此迭代在第3个位置停止。

答案 1 :(得分:1)

您可以将其切成正确数量的子列表:

slice_size = int(len(members) / no_of_teams)
teams = []
for i in range(no_of_teams):
    teams.append( members[i * slice_size: i * slice_size + slice_size]

答案 2 :(得分:1)

鉴于有n个团队,我们可以使用列表推导来构造n切片,从而将第 i 个元素分配给 i mod第n个团队:

teams = [ members[i::n] for i in range(n) ]

例如:

>>> n= 1
>>> [ members[i::n] for i in range(n) ]
[[1, 2, 3, 4, 5, 6, 7, 8, 9]]
>>> n= 2
>>> [ members[i::n] for i in range(n) ]
[[1, 3, 5, 7, 9], [2, 4, 6, 8]]
>>> n= 3
>>> [ members[i::n] for i in range(n) ]
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

答案 3 :(得分:1)

您可以分割列表:

>>> newcontent = re.sub(r"(\ssteps\:)(.*?)(\sfields\:)", replacement, content, flags=re.DOTALL)
>>> f = open('newfile.txt', 'w')
>>> f.write(newcontent)
>>> f.close()