[英]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
函數將應用colors
和multipliers
的值來一一重復。 所以,地圖的結果將是
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.