python - 为调色板实现 rgb 到 hex 的列表理解或更短的形式
问题描述
我如何将这个 for 循环转换为列表理解?
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)
打印语句生成的十六进制列表应如下所示
['#d9b483', '#f2e4dd', '#84aedd', '#cb874a', '#1c3115', '#9ab365', '#d5c8ba', '#578f33']
有没有减少这部分重复的pythonic方法?:-
hex(rgb[0]).split('x')[-1] +
解决方案
最直接的方法是使用字符串格式,在列表中是否包含:
[f'#{a:02x}{b:02x}{c:02x}' for a,b,c in rgb_arr]
要不就:
result = []
for a,b,c in rgb_arr:
result.append(f'#{a:02x}{b:02x}{c:02x}')
推荐阅读
- c++ - 如何在虚幻中使用画圆
- android - 无法覆盖启动器图标
- open-policy-agent - 开放策略代理返回的 json 响应的测试属性与 opa 测试
- reactjs - React 功能组件 - 对处理程序使用内联函数会影响性能?
- opengl - 同时使用 glUniform 和绑定 UBO
- php - Ajax 不在实时服务器上加载帖子,而是在本地主机上工作
- javascript - 如何在 vue 中使用生成的 HTML?
- scala - Scala 隐式
- python-3.x - 使用 python 与过滤列进行比较时,从列表中取出奇数
- ios - UICollectionViewCell sizeForItemAt 值以某种方式恢复为 fitItemSize?