【问题标题】:changing sub-sublist into tuples in python在python中将子子列表更改为元组
【发布时间】:2012-06-19 19:51:43
【问题描述】:

我有一个代表具有以下结构的 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-lists转换成元组,所以内容会变成这样:

[[(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 子列表转换为元组?提前致谢。

【问题讨论】:

    标签: python list python-2.7 tuples


    【解决方案1】:

    这个怎么样:

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

    为了完整起见,还包含 cmets。在 Python 3.x 中,map 是一个生成器,您可以使用:

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

    【讨论】:

    • 我认为应该是map(tuple, line)
    • +1,您可能还需要注意,在 Python 3.x 上,map() 是一个生成器,因此您需要list(map(...))
    • @F.J - 我想到了,但因为它是专门为 2.7 设计的,所以我觉得没问题。
    • 谢谢大家,这些回复来得太快了!!这是一个比我想出的更优雅的解决方案。遗憾的是,对于 1024x768 的 bmp(在我的 3ghz C2D quad 上大约 800 毫秒),它不一定更快,但我想这只是涉及一个真正的 cpu 密集型操作,无法更快地执行
    【解决方案2】:
    [[tuple(pix) for pix in line] for line in image]
    

    【讨论】:

      猜你喜欢
      • 2021-11-18
      • 2023-02-25
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-11
      相关资源
      最近更新 更多