我正在尝试将 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
次。
有人知道如何解决这个问题吗?
最佳答案
您可以使用list comprehension和内置函数zip
,在一个 for 循环中将 colors
中的每个元素与 multipliers
中的每个数字配对,然后在第二个 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 循环,其中一个循环迭代每一对(颜色、乘数),在第二个/内部循环中,您使用当前乘数和 extending 重复当前颜色。 结果
列表:
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)]
关于python - 乘以 RGB 值列表 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60127284/