2014-09-29 2 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이되어서는 안됩니다. –

+0

그리고 정확히'.join() '을 사용하여 결합하려고 시도하고 있습니까? –

+0

샘플 코드에서 100 및 200의 입력은 모두 7의 출력을 제공하고 300 및 400의 입력은 모두 5의 출력을 제공합니다. 실제로 원하는 것입니까? –

답변

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

이것이 효과가있었습니다! 빈리스트를 만들고 각 표현식을 하나의 큰 표현식에 합치기 전에 추가해야했습니다! 건배! –

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