将长元组拆分为小元组
我有一个很长的元组,比如这样:
(2, 2, 10, 10, 344, 344, 45, 43, 2, 2, 10, 10, 12, 8, 2, 10)
我想把它分成几个小的元组,像这样:
((2, 2, 10, 10), (344, 344, 45, 43), (2, 2, 10, 10), (12, 8, 2, 10))
我刚开始学Python,对元组和列表还不太熟悉。我的朋友说我应该把它分开,但我就是搞不定 -_-
我需要把这个元组分成每个包含4个元素的小元组,之后我会用这些小元组来画矩形,放到一张图片上,使用PIL这个库。
4 个回答
0
另一种可能的答案(使用生成器):
oldTuple = (2, 2, 10, 10, 344, 344, 45, 43, 2, 2, 10, 10, 12, 8, 2, 10)
newTuple = tuple(oldTuple[x:x+4] for x in range(0, len(oldTuple), 4))
4
当然可以!请看下面的内容:
在编程中,有时候我们需要让程序在特定的条件下执行某些操作。这就像给程序设定一个规则,只有当满足这个规则时,它才会做出反应。
比如说,你可能想要一个程序在用户输入正确的密码后才允许他们进入。这就需要用到“条件判断”。条件判断就像是在问:“如果这个条件成立,我就做这个事情;如果不成立,我就做另一个事情。”
在代码中,条件判断通常用“if”这个词来表示。简单来说,程序会检查一个条件,如果这个条件是对的,它就会执行某段代码;如果不对,它就会跳过这段代码,或者执行另一段代码。
这样一来,程序就能根据不同的情况做出不同的反应,变得更加智能和灵活。
希望这个解释能帮助你理解条件判断的基本概念!
>>> atup
(2, 2, 10, 10, 344, 344, 45, 43, 2, 2, 10, 10, 12, 8, 2, 10)
>>> [ atup[n:n+4] for n,i in enumerate(atup) if n%4==0 ]
[(2, 2, 10, 10), (344, 344, 45, 43), (2, 2, 10, 10), (12, 8, 2, 10)]
10
其实有一种说法可以用来解决这个问题:
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)
不过这个解释起来有点复杂。一个稍微通用一点的版本可以在itertools 的配方里找到。
你也可以自己对元组进行切片
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)]
这可能就是你朋友想表达的意思。