python - 如何在 Python 3.5 中将整数平均拆分为 n 长度的列表?

标签 python python-3.x

我需要能够将一个整数均匀地拆分为一个长度为 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/

相关文章:

python - 如何访问嵌套在 dict 中的元组切片?

python - 转置 pandas 中的列并重复每行的值(列次数)

python - pylint 仅在出错时返回非零返回状态

python - 为什么我不能在 Python 3 中使用 `print __doc__`?

python-3.x - 我怎样才能在 python 中放大以下输出,因为想将它用作其他地方的输入?

python - [IBM][CLI 驱动程序] SQL10013N 无法加载指定的库 "GSKit Error: 207"。 SQLSTATE=42724 SQLCODE=-10013

Python:编辑文件中的特定十六进制值

python - 使用 Python 对文件夹中的多个文件同时运行 perl 脚本

python - 迭代 Python3 map 的最快方法

python - 如何获取网页中的所有可见文本(不是 html 源代码)?