如何拆分每个第N个元素的Python列表

oct*_*pus 9 python arrays split loops list

我想要做的很简单,但我找不到怎么做.

  • 从1st元素开始,将每个第4个元素放入新列表中.
  • 重复第2,第3和第4个元素.

从:

list = ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b']
Run Code Online (Sandbox Code Playgroud)

至:

list1 = ['1', '5', '9']
list2 = ['2', '6', 'a']
list3 = ['3', '7', 'b']
list4 = ['4', '9']
Run Code Online (Sandbox Code Playgroud)

换句话说,我需要知道如何:

  • 从列表中获取第N个元素(在循环中)
  • 将其存储在新阵列中
  • 重复

Mar*_*ers 14

具体的解决方案是使用步幅切片:

source = ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b']
list1 = source[::4]
list2 = source[1::4]
list3 = source[2::4]
list4 = source[3::4]
Run Code Online (Sandbox Code Playgroud)

source[::4]从索引0开始,每个第4个元素; 其他切片只会改变起始索引.

通用的解决方案是使用一个循环做切片,并且将结果存储在一个外部列表; 列表理解可以做得很好:

def slice_per(source, step):
    return [source[i::step] for i in range(step)]
Run Code Online (Sandbox Code Playgroud)

演示:

>>> source = ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b']
>>> source[::4]
['1', '5', '9']
>>> source[1::4]
['2', '6', 'a']
>>> def slice_per(source, step):
...     return [source[i::step] for i in range(step)]
... 
>>> slice_per(source, 4)
[['1', '5', '9'], ['2', '6', 'a'], ['3', '7', 'b'], ['4', '8']]
>>> slice_per(source, 3)
[['1', '4', '7', 'a'], ['2', '5', '8', 'b'], ['3', '6', '9']]
Run Code Online (Sandbox Code Playgroud)

  • @EdgarKlerks:看来你在考虑[如何在Python中将列表拆分成大小均匀的块?](http://stackoverflow.com/q/312443).. (3认同)