基本上,我有一个像“12345678”这样的字符串,需要一个包含此信息的列表,但要分成长度为 3 的子字符串。问题是,我需要它右对齐,所以输出必须是 ['12', '345', '678']
而不是 ['123', '456', '78']
。
我如何用很少的代码行最好地实现,并且最好不使用额外的导入?
很容易改编 How do I split a list into equally-sized chunks? 的最佳答案:
def chunks_rightaligned(l, n):
orphan = len(l) % n
if orphan:
yield l[: orphan]
for i in range(orphan, len(l), n):
yield l[i : i + n]
这首先产生剩余长度的 block ,然后从孤立大小而不是 0 开始以 block 大小的步长迭代索引。
演示:
>>> def chunks_rightaligned(l, n):
... orphan = len(l) % n
... if orphan:
... yield l[: orphan]
... for i in range(orphan, len(l), n):
... yield l[i : i + n]
...
>>> list(chunks_rightaligned("12345678", 3))
['12', '345', '678']
>>> list(chunks_rightaligned("1234567", 3))
['1', '234', '567']
>>> list(chunks_rightaligned("123456", 3))
['123', '456']
我是一名优秀的程序员,十分优秀!