首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >列表理解或较短的形式,实现调色板的rgb到十六进制

列表理解或较短的形式,实现调色板的rgb到十六进制
EN

Stack Overflow用户
提问于 2020-03-20 06:39:16
回答 6查看 146关注 0票数 1

我如何将这个for循环转换为列表理解?

代码语言:javascript
运行
复制
rgb_arr = [[217, 180, 131], [242, 228, 221], [132, 174, 221], [203, 135, 74], [28, 49, 21],
[154, 179, 101], [213, 200, 186], [87, 143, 51]]

hex_palette = []
for rgb in rgb_arr:
    col_hex = '#' + hex(rgb[0]).split('x')[-1] + hex(rgb[1]).split('x')[-1] + hex(rgb[2]).split('x')[-1]
    hex_palette.append(col_hex)
print(hex_palette)

从print语句得到的十六进制列表应该如下所示

代码语言:javascript
运行
复制
['#d9b483', '#f2e4dd', '#84aedd', '#cb874a', '#1c3115', '#9ab365', '#d5c8ba', '#578f33']

有没有一种简单的方法来减少这部分的重复?

代码语言:javascript
运行
复制
hex(rgb[0]).split('x')[-1] +
EN

回答 6

Stack Overflow用户

发布于 2020-03-20 06:45:00

要做到这一点,最直接的方法是使用字符串格式化,无论是否在列表copmrehension中:

代码语言:javascript
运行
复制
[f'#{a:02x}{b:02x}{c:02x}' for a,b,c in rgb_arr]

或者只是:

代码语言:javascript
运行
复制
result = []
for a,b,c in rgb_arr:
    result.append(f'#{a:02x}{b:02x}{c:02x}')
票数 2
EN

Stack Overflow用户

发布于 2020-03-20 06:45:09

您可以简单地使用列表理解和f字符串:

代码语言:javascript
运行
复制
hex_palette = [f"#{rgb[0]:02x}{rgb[1]:02x}{rgb[2]:02x}" for rgb in rgb_arr]

在格式上,初始0表示用0-s填充空格,2表示填充到两个字符为止,x表示使用十六进制。

或者,如果您使用的是较旧的Python (如3.5 ),则可以使用字符串格式而不是f字符串:

代码语言:javascript
运行
复制
hex_palette = ["#{rgb[0]:02x}{rgb[1]:02x}{rgb[2]:02x}".format(rgb=rgb) for rgb in rgb_arr]
票数 1
EN

Stack Overflow用户

发布于 2020-03-20 06:48:02

还有一种变体:

代码语言:javascript
运行
复制
[("#%02x%02x%02x"%tuple(b)) for b in rgb_arr]

(处理小于10的值)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60766064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档