我有这样的列表
[255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 127, 0, 255, 127, 0, 255, 127, 0, 255, 127, 0, 255, 127, 0, 255, 0, 127, 255, 0, 127, 255, 0, 127, 255, 0, 127, 255, 0, 127, 255, 0, 127, 255, 0, 127, 255]
什么是转换成3对(rgb)的最佳方法,里面是元组
pixel = [(255,0,0),(255,0,0),(255,0,0),(255,0,0),(127,0,255),(127,0,255),(127,0,255),(127,0,255),(127,0,255),(0,127,255),(0,127,255),(0,127,255),(0,127,255),(0,127,255),(0,127,255),(0,127,255)]
您可以简单地使用iter()如下:
RGB = [255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 127, 0, 255, 127, 0, 255, 127, 0, 255, 127, 0, 255, 127, 0, 255, 0, 127, 255, 0, 127, 255, 0, 127, 255, 0, 127, 255, 0, 127, 255, 0, 127, 255, 0, 127, 255]
it = iter(RGB)
print(list(zip(it,it,it)))
如果要在元组中包含N个元素,则只需使用zip(it * N),您将在元组中获得N个元素。
在这种情况下,使用numpy
非常容易:
import numpy as np
pixels = [255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 127, 0, 255, 127, 0, 255, 127, 0, 255, 127, 0, 255, 127, 0, 255, 0, 127, 255, 0, 127, 255, 0, 127, 255, 0, 127, 255, 0, 127, 255, 0, 127, 255, 0, 127, 255]
np_pixels = np.array(pixels).reshape((-1, 3))
print(np_pixels)
输出:
>>> print(np_pixels)
[[255 0 0]
[255 0 0]
[255 0 0]
[255 0 0]
[127 0 255]
[127 0 255]
[127 0 255]
[127 0 255]
[127 0 255]
[ 0 127 255]
[ 0 127 255]
[ 0 127 255]
[ 0 127 255]
[ 0 127 255]
[ 0 127 255]
[ 0 127 255]]
如果您坚持要使它们成为元组,则可以随后执行此操作:
np_pixels = [tuple(row) for row in np_pixels]
输出:
[(255, 0, 0), (255, 0, 0), (255, 0, 0), (255, 0, 0), (127, 0, 255), (127, 0, 255), (127, 0, 255), (127, 0, 255), (127, 0, 255), (0, 127, 255), (0, 127, 255), (0, 127, 255), (0, 127, 255), (0, 127, 255), (0, 127, 255), (0, 127, 255)]
尝试使用列表理解:
print([l[i:i + 3] for i in range(0, len(l), 3)])