我需要能够将一个整数均匀地拆分为一个长度为 n 的列表。
例如 n = 4,
12 -> [0, 0, 1, 2]
1234 -> [1, 2, 3, 4]
12345 -> [1, 2, 3, 45]
123456 -> [1, 2, 34, 56]
1234567 -> [1, 23, 45, 67]
12345678 -> 12, 34, 56, 78]
123456789 -> [12, 34, 56, 789]
我敢肯定我给出的示例数量有点过头了,但这将有助于理解这一点。
我过去使用的将项目拆分为列表的代码是:
def split(s, chunk_size):
a = zip(*[s[i::chunk_size] for i in range(chunk_size)])
return [''.join(t) for t in a]
但是这段代码只分成 n block 。 (来自 StackOverflow 的代码,我不记得确切的帖子,抱歉)。
感谢您的帮助。
最佳答案
def split(seq, n):
"""Partitions `seq` into `n` successive slices of roughly equal size.
The sizes of each yielded slice shall differ by at most one.
"""
q, r = divmod(len(seq), n)
start = 0
for i in range(n):
size = q + (i < r)
yield seq[start : start + size]
start += size
它的工作方式基本上与 this popular answer 相同,只是它将余数平均分配到每个 n 切片中。
不幸的是,这将分配给列表的头部。要针对您的情况进行调整,您需要将 size = q + (i < r)
更改为类似以下内容:
size = q + (i >= (n - r))
通过此更改,以下内容:
print(list(split('1234', 4)))
print(list(split('12345', 4)))
print(list(split('123456', 4)))
print(list(split('1234567', 4)))
print(list(split('12345678', 4)))
print(list(split('123456789', 4)))
打印:
['1', '2', '3', '4']
['1', '2', '3', '45']
['1', '2', '34', '56']
['1', '23', '45', '67']
['12', '34', '56', '78']
['12', '34', '56', '789']
关于python - 如何在 Python 3.5 中将整数平均拆分为 n 长度的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39136825/