2014-09-29 22 views
0

我想使用輸入圖像和兩個列表中的值使用簡單表達式來創建類別圖像。將兩個列表中的項加入到字符串表達式

我有兩個列表這樣的:

A = [100, 200, 300, 400, 500] 
B = [1, 2, 3, 4, 5] 

我想寫類似的表達式:

(value < 100)?1:0 | (value < 200)?2:0 | (value < 300)?3:0 | (value < 400)?4:0 | (value < 500)?5:0 

讓我最終的圖像,其中輸入圖像<所有值100給出1的新值,依此類推。

我明白我可以寫它,因爲我寫了上面,但我需要這樣做多次,列表的長度每次都會改變。

有沒有辦法用.join()做到這一點?

+0

你確定那些ORing的值不應該是1,2,4,8,16? – 2014-09-29 11:42:04

+0

你究竟想用'.join()'加入? – 2014-09-29 11:45:48

+0

在你的示例代碼中,100和200的輸入都會給出7的輸出,而輸入300和400都會給出5的輸出。這真的是你想要的嗎? – 2014-09-29 11:48:13

回答

0

據我可以從你的查詢做,我想你想使用兩個列表,如果是這樣的話下面的邏輯應該工作產生的表達(希望我的假設不轉出錯誤):

A = [100, 200, 300, 400, 500] 
B = [1, 2, 3, 4, 5] 

out_expr = '' 
for i in range(len(A)): 
    out_expr = out_expr + '(value < ' + str(A[i]) + ')?' + str(B[i]) + ':0 | ' 

out_expr = out_expr[:-2] 
print out_expr 
+0

這工作!我需要創建一個空列表並在將每個表達式連接成一個大表達式之前附加它們!乾杯! – 2014-09-29 13:46:40

0

您是否在尋找這個

>>> A = [100, 200, 300, 400, 500] 
>>> B = [1, 2, 3, 4, 5] 
>>> x=222 
>>> for size,cat in zip(A,B): 
... if x<size: 
...  print cat 
...  break 
... 
3 
0

如果你喜歡的俏皮話,你可以使用這個:

A = [100, 200, 300, 400, 500] 
B = [1, 2, 3, 4, 5] 

' | '.join('(value < {0})?{1}:0'.format(*data) for data in zip(A, B)) 
相關問題