RGB值的多重列表Python

问题描述 投票:2回答:2

我正在尝试将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数量。

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

python list sorting rgb multiplying
2个回答
3
投票

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

multipliers

输出:

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

您还可以将2用于循环,其中一个循环遍历每对(颜色,乘数),在第二个/内部循环中,使用当前乘数重复当前颜色,并在[(70, 76, 75), (70, 76, 75), (97, 107, 93), (97, 107, 93), (97, 107, 93)] 列表中重复extending

result

输出:

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

1
投票

使用[(70, 76, 75), (70, 76, 75), (97, 107, 93), (97, 107, 93), (97, 107, 93)] 的一种可能的解决方案:

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)] 功能将应用mapcolors中的值以一一重复。因此,地图的结果将是

multipliers

现在,我们使用list(map(repeat, x, y)) [repeat((70, 76, 75), 2), repeat((97, 107, 93), 3)] 消耗map返回的可迭代对象中每个可迭代对象的值。

© www.soinside.com 2019 - 2024. All rights reserved.