将一个长元组分成较小的元组

gio*_*lio 11 python split tuples list

我有一个很长的元组

(2, 2, 10, 10, 344, 344, 45, 43, 2, 2, 10, 10, 12, 8, 2, 10)
Run Code Online (Sandbox Code Playgroud)

我试图把它分成像元组一样的元组

((2, 2, 10, 10), (344, 344, 45, 43), (2, 2, 10, 10), (12, 8, 2, 10))
Run Code Online (Sandbox Code Playgroud)

我是python的新手,并且对于元组o(2,2,10,10,344,344,45,43,2,10,10,12,8,2,10)r列表不是很好.我的朋友说我应该分开它,但我不能得到它-_-

我需要将元组拆分为带有4个元素的元组,稍后我将使用矩形绘制到带有PIL的图像.

Joc*_*zel 9

那有一定的成语:

def grouper(n, iterable):
    args = [iter(iterable)] * n
    return zip(*args)

t = (2, 2, 10, 10, 344, 344, 45, 43, 2, 2, 10, 10, 12, 8, 2, 10)
print grouper(4, t)
Run Code Online (Sandbox Code Playgroud)

但它的那种复杂的解释.itertools receipes中列出了稍微更为通用的版本.

你也可以自己切片

parts = (t[0:4], t[4:8], t[8:12], t[12:16])

# or as a function
def grouper2(n, lst):
    return [t[i:i+n] for i in range(0, len(t), n)]
Run Code Online (Sandbox Code Playgroud)

这可能是你朋友的意思.

  • 我不会称之为惯用语 - 我以前从未见过它,我花了几秒钟才弄明白发生了什么.这没有什么不对,但当然,一定要记录和doctest. (5认同)
  • 问题是人们不可避免地按原样复制和粘贴代码.我不认为扩散一个不太正确的版本是一个胜利,因为它只是一行代码. (2认同)