小编典典

Python:从列表中获取很多列表

python

你好

我想将一个列表拆分为多个x元素长度的列表,例如:

a = (1, 2, 3, 4, 5)

并得到:

b = ( (1,2), (3,4), (5,) )

如果长度设置为2或:

b = ( (1,2,3), (4,5) )

如果长度等于3 …

有写这个的好方法吗?否则,我认为最好的方法是使用迭代器编写它。


阅读 132

收藏
2021-01-20

共1个答案

小编典典

迭代工具文档。阅读,学习,喜欢它。

具体来说,从食谱部分:

import itertools

def grouper(n, iterable, fillvalue=None):
  "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
  args = [iter(iterable)] * n
  return itertools.izip_longest(fillvalue=fillvalue, *args)

这使:

>>> tuple(grouper(3, (1,2,3,4,5)))
((1, 2, 3), (4, 5, None))

那不是你想要的…你不想None在那里…所以。快速修复:

>>> tuple(tuple(n for n in t if n) for t in grouper(3, (1,2,3,4,5)))
((1, 2, 3), (4, 5))

如果您不想每次都输入列表理解,我们可以将其逻辑移至该函数中:

def my_grouper(n, iterable):
  "my_grouper(3, 'ABCDEFG') --> ABC DEF G"
  args = [iter(iterable)] * n
  return tuple(tuple(n for n in t if n)
       for t in itertools.izip_longest(*args))

这使:

>>> tuple(my_grouper(3, (1,2,3,4,5)))
((1, 2, 3), (4, 5))

做完了

2021-01-20