Python 创建给定Rgb范围的十六进制代码列表

Python 创建给定Rgb范围的十六进制代码列表,python,string,list,hex,concatenation,Python,String,List,Hex,Concatenation,我有RGB的这3个顶点(终值),分别为#ff0000、#ffCharStyle和#350000,其中R从35到ff,G从00到cf。我需要创建它们之间所有可能值的列表。我做了以下工作: import re my_list=[] for i in xrange(53,256): for j in xrange(0,208): for k in xrange(0,208): item = str(hex(i))+str(hex(j))+str(hex(

我有
RGB
的这3个顶点(终值),分别为
#ff0000
#ffCharStyle
#350000
,其中
R
35
ff
G
00
cf
。我需要创建它们之间所有可能值的列表。我做了以下工作:

import re
my_list=[]
for i in xrange(53,256):
    for j in xrange(0,208):
        for k in xrange(0,208):
            item = str(hex(i))+str(hex(j))+str(hex(k))
            item2 = re.sub('(0x)','',item)
            my_list.append(item2)  

我对整数值进行迭代并将其转换为十六进制,然后连接
RGB
值,并从连接的字符串中替换
0x
(这不起作用)。这个方法很慢。有更好的方法吗?

作为基准,我在我的计算机上运行了您的代码。它需要27.8秒

正则表达式总是代价高昂,所以让我们用简单的字符串替换来替换它们:

my_list=[]
for i in xrange(53,256):
    for j in xrange(0,208):
        for k in xrange(0,208):
            item = str(hex(i))+str(hex(j))+str(hex(k))
            item2 = item.replace("0x", "")
            my_list.append(item2)
这需要8.8秒

但是,所有这些使用十六进制数字的字符串表示并删除前面的
0x
,对我来说似乎有点不合适,特别是因为Python内置了用于此目的的字符串格式:

my_list=[]
for i in xrange(53,256):
    for j in xrange(0,208):
        for k in xrange(0,208):
            my_list.append("{0:02x}{1:02x}{2:02x}".format(i,j,k))
这需要8.3秒。稍微好一点,但看起来也干净一点。如果我们使用,我们甚至可以将其编写为一行(sans long line break and import语句):

这需要8.1秒。还是没有

目前,字符串格式化是花费时间最多的操作。这也是一个我们可以轻松避免的操作(因为我们只格式化相同的256个值)。让我们创建一个查找表:

import itertools
m = ["{0:02x}".format(i) for i in xrange(256)]
my_list = [m[i] + m[j] + m[k] for i,j,k
        in itertools.product(xrange(53,256), xrange(0,208), xrange(0,208))]

运行时间:1.6秒。希望足够快。

作为基准,我在我的计算机上运行了你的代码。它需要27.8秒

正则表达式总是代价高昂,所以让我们用简单的字符串替换来替换它们:

my_list=[]
for i in xrange(53,256):
    for j in xrange(0,208):
        for k in xrange(0,208):
            item = str(hex(i))+str(hex(j))+str(hex(k))
            item2 = item.replace("0x", "")
            my_list.append(item2)
这需要8.8秒

但是,所有这些使用十六进制数字的字符串表示并删除前面的
0x
,对我来说似乎有点不合适,特别是因为Python内置了用于此目的的字符串格式:

my_list=[]
for i in xrange(53,256):
    for j in xrange(0,208):
        for k in xrange(0,208):
            my_list.append("{0:02x}{1:02x}{2:02x}".format(i,j,k))
这需要8.3秒。稍微好一点,但看起来也干净一点。如果我们使用,我们甚至可以将其编写为一行(sans long line break and import语句):

这需要8.1秒。还是没有

目前,字符串格式化是花费时间最多的操作。这也是一个我们可以轻松避免的操作(因为我们只格式化相同的256个值)。让我们创建一个查找表:

import itertools
m = ["{0:02x}".format(i) for i in xrange(256)]
my_list = [m[i] + m[j] + m[k] for i,j,k
        in itertools.product(xrange(53,256), xrange(0,208), xrange(0,208))]

运行时间:1.6秒。希望足够快。

太棒了,它能工作。。最后一个应该实际分配给变量而不是返回,对吗??你能解释一下{0:02x}的作用吗?@Swordy是的,谢谢,我改了。它以前是返回的,因为我将所有版本作为函数编写,以对它们进行基准测试。而
{0:02x}
是一个格式字符串。你可以阅读更多关于他们的信息;这些方法对于新手来说特别有用。基本上,它说“取格式化方法的第一个参数(基于0)并将其打印为十六进制数(
x
),并将零放在前面,使其至少有2个字符长(
02
)。”太棒了,它很管用。。最后一个应该实际分配给变量而不是返回,对吗??你能解释一下{0:02x}的作用吗?@Swordy是的,谢谢,我改了。它以前是返回的,因为我将所有版本作为函数编写,以对它们进行基准测试。而
{0:02x}
是一个格式字符串。你可以阅读更多关于他们的信息;这些方法对于新手来说特别有用。基本上,它说“取格式化方法的第一个参数(基于0)并将其打印为十六进制数(
x
),并将零放在前面,使其至少有2个字符长(
02