簡體   English   中英

乘以 RGB 值列表 Python

[英]Multiply List of RGB values Python

我正在嘗試將 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次。

有誰知道如何解決這個問題?

您可以使用列表中理解和內置功能的zip ,對有zip的每個元素colors與每個數字multipliers在一個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 循環,一個循環遍歷每一對(顏色,乘數),在第二個/內部循環中,您使用當前乘數重復當前顏色並擴展result列表:

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)]

使用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 返回的迭代中的每個迭代中消耗值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM