2014-09-29 30 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)) 
相关问题