簡體   English   中英

在列表理解上增加值限制

[英]adding value limitations on list comprehension

我試圖找到一種方法來獲取兩個int元組的值之間的差異。 元組本身有局限性,因為它們代表RGB顏色。 這是我到目前為止:

tupleone = (255, 0, 255)  # Magenta
tupletwo = (255, 0, 0)  # Red
tuple([tupleone[x] - tupletwo[x] for x in range(3)])  # makes Blue

我在這里遇到的問題是邊界檢查,因為每個顏色值必須是0-255。 我想要的是,如果從較小的數字中減去較大的數字,則為該指定的索引返回0。 我一直用它來測試一個索引:

value = -10
max(0, min(color, 255))  # value = 0

這是我能用清單理解干凈地做些什么嗎? 還是有更好的方法?

這是一種方式

tuple(sorted((0, 255, tupleone[x] - tupletwo[x]))[1] for x in range(3))

但可能你應該只使用一個功能

def clamp_0_255(x):
    return max(0, min(x, 255))

tuple(clamp_0_255(tupleone[x] - tupletwo[x]) for x in range(3))

旁白:您不需要使用列表理解。 tuple()適用於生成器表達式

當然,只要結合你所擁有的:

tuple(max(0, min(tupleone[x] - tupletwo[x], 255)) for x in range(3))

暫無
暫無

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

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