【问题标题】:Multiply List of RGB values Python乘以 RGB 值列表 Python
【发布时间】:2020-02-08 13:34:58
【问题描述】:

我正在尝试将 RGB 值列表相乘,更具体地说,将每个元素与不同的变量相乘 例如

colors = [(70, 76, 75), (97, 107, 93)]
multipliers = [2,3]
prod = lambda a,b: [a[i]*b[i] for i in range(len(a))]
newcolors = (prod (colors, multipliers))

期望的输出:

[(70,76,75), (70,76,75), (97, 107, 93), (97, 107, 93), (97, 107, 93)] 

但我得到的输出是

[(70,76,75, 70,76,75), (97, 107, 93, 97, 107, 93,97, 107, 93)]

返回的列表不再包含 RGB 值

似乎在起作用的是

n = 2
newcolors = sorted(colors*n)

输出:

[(70,76,75), (70,76,75), (97, 107, 93), (97, 107, 93)]

但是这样所有的 RGB 值都乘以相同的 n-amount 次数。

有人知道如何解决这个问题吗?

【问题讨论】:

  • 您能否更具体地说明问题是什么?

标签: python list sorting rgb multiplication


【解决方案1】:

您可以使用list comprehension 和内置函数zip,将zip 中的每个元素与colors 中的每个数字配对,在一个for 循环中,然后在第二个for 循环中是说当前颜色应该重复多少次

[e for e, m in zip(colors, multipliers) for _ in range(m)]

输出:

[(70, 76, 75), (70, 76, 75), (97, 107, 93), (97, 107, 93), (97, 107, 93)]

您还可以使用 2 个 for 循环,一个循环遍历每一对(颜色、乘数),在第二个/内部循环中,您使用当前乘数和 extendingresult 列表重复当前颜色:

result = []
for e, m in zip(colors, multipliers):
    result.extend([e] * m)
print(result)

输出:

[(70, 76, 75), (70, 76, 75), (97, 107, 93), (97, 107, 93), (97, 107, 93)]

【讨论】:

  • 一个解释会是一个很好的答案
  • @Tryph 我希望会更好
  • 更好的 IMO ;) 我正在写一个关于第二个解决方案的答案,但既然你这样做了,我允许自己将 Python 文档的链接添加到你的答案中。
【解决方案2】:

使用itertools 的一种可能解决方案:

import itertools

colors = [(70, 76, 75), (97, 107, 93)]
multipliers = [2,3]

print(list(itertools.chain.from_iterable(map(itertools.repeat, colors, multipliers))))

输出:

[(70, 76, 75), (70, 76, 75), (97, 107, 93), (97, 107, 93), (97, 107, 93)]

说明:

这里,map 函数将应用来自colorsmultipliers 的值一一重复。因此,地图的结果将是

list(map(repeat, x, y))
[repeat((70, 76, 75), 2), repeat((97, 107, 93), 3)]

现在,我们使用 chain.from_iterable 从 map 返回的可迭代对象中获取每个可迭代对象的值。

【讨论】:

    猜你喜欢
    • 2020-03-25
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多