在python中将子子列表更改为元组

时间:2012-06-19 19:51:43

标签: python list python-2.7 tuples

我有一个表示具有以下结构的bmp图像的变量:

image=[line1, line2, ... linen] 
line=[pix1,pix2,...,pixn]
pix=[r,g,b]
因此,例如,此变量的内容可能看起来像

[[[0,0,0],[1,0,1],[2,4,5]],[[3,4,5],[1,7,4],[1,3,5]],[[2,4,2],[1,6,7],[1,9,0]]]

现在我想将每个line-item的pix-list转换为元组,所以内容将变成这样:

[[(0,0,0),(1,0,1),(2,4,5)],[(3,4,5),(1,7,4),(1,3,5)],[(2,4,2),(1,6,7),(1,9,0)]]

我可以通过

来做到这一点
for i in range(0,len(image)-1):
   for j in range(0,len(image[0])-1):
      image[i][j] = tuple(image[i][j])

但这似乎不是最“pythonesque”的方式,我需要尽可能快的计算方法,上面似乎远非如此。

我用

尝试了
[tuple(pix) for pix in line for line in image]

因为我虽然这应该更快,但当然上述失败了。

那么有没有人可以帮助我以最快的方式将我的pix子列表转换为元组?提前致谢。

2 个答案:

答案 0 :(得分:4)

这个怎么样:

[map(tuple, line) for line in image]

并包含对完整性的评论。在Python 3.x中,map是一个生成器,你可以使用:

[list(map(tuple, line)) for line in image]

答案 1 :(得分:4)

[[tuple(pix) for pix in line] for line in image]